Spring专家课程Day02_Spring-DI

文章目录

  • 一、依赖注入_Autowired
    • 1.配置类中@Bean 方式注入
      • 1.1)注入实例
      • 1.2)自动注入的匹配原则
    • 2.组件扫描实现自动注入 @Autowired
    • 3.set方法注入
  • 二、接口解耦_自动注入规则
    • 1)利用接口解耦
    • 2)@Autowired的注入规则
    • 3)@Qualifier注解在调用类中指定对应的组件
  • 三、同时使用@Bean和@Component_Druid连接池
    • 1.@Bean和@Component同时使用
    • 2、Druid
      • 2.1)Druid数据库连接池
      • 2.2)示例
  • 四、读取Properties_@Value
    • 1.properties文件env读取
    • 2.@Value读取配置
      • 2.1 @Value放在形参中配置
  • 总结:
    • 1.工作中@Bean麻烦,@Component使用更多
    • 2. String sql1="select 'Hello Druid'"; 可测试数据库连接情况;
    • 3.[Druid和HikariCP对比](https://blog.csdn.net/weixin_38943725/article/details/122716340)
      • 3.1 性能方面:HikariCP因为细节方面优化力度较大,性能方面强于Druid
      • 3.2 功能丰富程度方面:Druid功能更全面除了具有连接池的基本功能以外,还支持sql级监控,支持扩展,防止SQL注入等功能。
      • 3.3 使用热度:Druid在国内使用较多,国内有很多生产实践。HikariCP是spring boot 2.0以后默认连接池,在国外使用较多。

一、依赖注入_Autowired

1.配置类中@Bean 方式注入

1.1)注入实例

在这里插入图片描述
配置类:

public class Config {@Beanpublic Saw saw(){return new Saw();}@Beanpublic Worker worker(Saw saw){Worker worker=new Worker();worker.saw = saw;return worker;}
}

1.2)自动注入的匹配原则

在这里插入图片描述
在这里插入图片描述

2.组件扫描实现自动注入 @Autowired

配置类:

@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")public class Config {}

Saw组件类:

@Component
public class Saw implements Serializable {String name="寒冰锯";@Overridepublic String toString() {return name;}
}

Woker组件类:

@Component
public class Worker implements Serializable {String name="光头强";@Autowiredpublic Saw saw;public void work(){System.out.println(name+"使用..."+saw+"...砍树");}
}

3.set方法注入

在这里插入图片描述

二、接口解耦_自动注入规则

1)利用接口解耦

在这里插入图片描述
在这里插入图片描述
那个类上使用了@Component标注,Tool就指向那个
在这里插入图片描述
配置类:

@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")public class Config {}

2)@Autowired的注入规则

组件上面都加@Component的情况,
在这里插入图片描述
在这里插入图片描述

3)@Qualifier注解在调用类中指定对应的组件

组件类都是@Component
在这里插入图片描述

三、同时使用@Bean和@Component_Druid连接池

1.@Bean和@Component同时使用

@Bean组件注入到@Component;
@Component组件注入到@Bean;
以上两种情况都可以;

Config配置类:

@Configuration
public class SysConfig {@Beanpublic Date myDate(){return new Date();}
}

Worker组件类:

@Component
public class Worker implements Serializable {String name="光头强";@Autowired@Qualifier("axe")public Tool tool;@Autowiredprivate Date dt; public void work(){System.out.println(name+"使用..."+tool+"...砍树");System.out.println(dt);}
}

2、Druid

2.1)Druid数据库连接池

在这里插入图片描述

2.2)示例

POM配置

        <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.15</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency>

Config类配置:

@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")public class Config {@Bean(initMethod="init", destroyMethod="close")public DataSource dataSource(){DruidDataSource dt =new DruidDataSource();dt.setDriverClassName("com.mysql.cj.jdbc.Driver");dt.setUrl("jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true");dt.setUsername("root");dt.setPassword("root");dt.setMaxActive(10);dt.setInitialSize(2);return dt;}
}

测试类代码:

    @Testpublic void testDruid(){DataSource ds = ctx.getBean("dataSource", DataSource.class);try(Connection conn = ds.getConnection()) {String sql="select * from student";Statement st= conn.createStatement();ResultSet rs=st.executeQuery(sql);while (rs.next()){System.out.println(rs.getString(2));}} catch (Exception e) {e.printStackTrace();}}

四、读取Properties_@Value

1.properties文件env读取

配置类代码:

@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")
@PropertySource("classpath:jdbc.properties")
public class Config {@AutowiredEnvironment env;@Bean(initMethod = "init", destroyMethod = "close")public DataSource dataSource(){DruidDataSource dt =new DruidDataSource();dt.setDriverClassName(env.getProperty("db.driver"));dt.setUrl(env.getProperty("db.url"));dt.setUsername(env.getProperty("db.username"));dt.setPassword(env.getProperty("db.password"));dt.setMaxActive(env.getProperty("db.maxActive",Integer.class));dt.setInitialSize(env.getProperty("db.initSize",Integer.class));return dt;}
}

jdbc.properties代码:

db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
db.username=root
db.password=root
db.maxActive=10
db.initialSize=2

2.@Value读取配置

2.1 @Value放在形参中配置

配置类:

@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")
@PropertySource("classpath:jdbc.properties")
public class Config {@AutowiredEnvironment env;@Bean(initMethod = "init", destroyMethod = "close")public DataSource dataSource(@Value("${db.driver}") String driver,@Value("${db.url}") String url,@Value("${db.username}") String username,@Value("${db.password}") String password,@Value("${db.maxActive}") int maxActive,@Value("${db.initSize}") int initSize){DruidDataSource dt =new DruidDataSource();dt.setDriverClassName(driver);dt.setUrl(url);dt.setUsername(username);dt.setPassword(password);dt.setMaxActive(maxActive);dt.setInitialSize(initSize);return dt;}
}

总结:

1.工作中@Bean麻烦,@Component使用更多

2. String sql1=“select ‘Hello Druid’”; 可测试数据库连接情况;

3.Druid和HikariCP对比

3.1 性能方面:HikariCP因为细节方面优化力度较大,性能方面强于Druid

3.2 功能丰富程度方面:Druid功能更全面除了具有连接池的基本功能以外,还支持sql级监控,支持扩展,防止SQL注入等功能。

3.3 使用热度:Druid在国内使用较多,国内有很多生产实践。HikariCP是spring boot 2.0以后默认连接池,在国外使用较多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2724.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot中Elasticsearch的连接配置、原理与使用

Spring Boot中Elasticsearch的连接配置、原理与使用 引言 Elasticsearch是一种开源的分布式搜索和数据分析引擎&#xff0c;它可用于全文搜索、结构化搜索、分析等应用场景。在Spring Boot中&#xff0c;我们可以通过Elasticsearch实现对数据的搜索和分析。本文将介绍Spring …

Red Hat宣布限制访问源代码,尚有两种方式可获取

日前Red Hat宣布限制访问Red Hat Enterprise Linux(RHEL)源代码&#xff0c;而此举也将影响AlmaLinux 、Rocky Linux 等下游发行版。 随即Rocky Linux发布了名为《Keeping Open Source Open》的博文。文中是这样说的&#xff1a;    Red Hat的**ERP**服务条款 (TOS) 和最终…

驱动开发:内核读写内存多级偏移

让我们继续在《内核读写内存浮点数》的基础之上做一个简单的延申&#xff0c;如何实现多级偏移读写&#xff0c;其实很简单&#xff0c;读写函数无需改变&#xff0c;只是在读写之前提前做好计算工作&#xff0c;以此来得到一个内存偏移值&#xff0c;并通过调用内存写入原函数…

SpringBoot的日志

SpringBoot的日志 &#x1f50e;日志是什么&#x1f50e;日志的作用&#x1f50e;日志级别日志级别的作用日志级别的分类日志级别的设置 &#x1f50e;打印日志打印日志具体内容划分 &#x1f50e;常用的日志框架为什么这样设计对比System.out.ptintln()与日志框架 &#x1f50…

Observability:如何把 Elastic Agent 采集的数据输入到 Logstash 并最终写入到 Elasticsearch

在之前的文章 “安装独立的 Elastic Agents 并采集数据 - Elastic Stack 8.0”&#xff0c;我们详述了如何使用 No Fleet Server 来把数据写入到 Elasticsearch 中。在今天的文章中&#xff0c;我们来详述如下使用 Elastic Agents 在独立&#xff08;standalone&#xff09;模式…

《诸神之眼:Nmap网络安全审计技术揭秘》读书笔记

《诸神之眼&#xff1a;Nmap网络安全审计技术揭秘》读书笔记 作者&#xff1a;李华峰 ◆ 前言 NSE是Nmap中革命性的创新。通过Nmap强大的脚本引擎&#xff08;NSE&#xff09;&#xff0c;每一个用户都可以向Nmap中添加自己编写的代码&#xff0c;从而将Nmap打造成用户自由定制…

fusionpbx简介

概述 fusionpbx是以freeswitch作为底层框架开发而成的开源PBX&#xff0c;在freeswitch的基础上&#xff0c;优化了GUI的易用性。 fusionpbx可用作高可用性的单租户或基于域的多租户 PBX、运营商级交换机、呼叫中心服务器、传真服务器、voip服务器、语音邮件服务器、会议服务…

深入理解深度学习——BERT派生模型:T5(Text to Text Transfer Transformer)

分类目录&#xff1a;《深入理解深度学习》总目录 T5的全称为Text to Text Transfer Transformer&#xff0c;是谷歌提出的预训练语言模型领域的通用模型&#xff0c;该模型将所有自然语言问题都转化成文本到文本的形式&#xff0c;并用一个统一的模型解决。为了得到大一统的高…

hexo stellar设置笔记页面

stellar主题的作者在其文档介绍了如何进行笔记页面的简单设置&#xff0c;但是我看了以后还是有点云里雾里&#xff0c;在一顿查阅资料以后&#xff0c;我终于找到了解决办法。 参考下面这个博主的文章。写得很详细&#xff0c;这里就不再赘述啦。 Stellar主题自定义侧边栏教…

C#,保持亮度的动态直方图均衡化(Brightness Preserving Dynamic Histogram Equalization:BPDHE)源代码

图像增强的主要目的是显示隐藏的图像细节&#xff0c;或者用新的动态范围增加图像对比度。直方图均衡&#xff08;HE&#xff09;是用于图像对比度增强的最流行的技术之一&#xff0c;因为HE在计算上快速且易于实现。HE通过基于输入灰度级的概率分布重新映射图像的灰度级来执行…

微服务远程调用openFeign整合

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 微服务探索之旅 ✨特色专…

聚类分析(文末送书)

目录 聚类分析是什么 一、 定义和数据类型 聚类应用 聚类分析方法的性能指标 聚类分析中常用数据结构有数据矩阵和相异度矩阵 聚类分析方法分类 二、K-means聚类算法 划分聚类方法对数据集进行聚类时包含三个要点 K-Means算法流程: K-means聚类算法的特点 三、k-med…