第三方bean管理
开始前注入依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.10</version></dependency>
一般情况下
@Configuration
public class SpringConfig {
//1.定义一个方法获得要管理的对象
//2.添加@Bean,表示当前方法的返回值是一个Bean
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/xxsxpt1");
ds.setUsername("root");
ds.setPassword("密码");
return ds;
}
}
会得到初始化的结果
如果说你们前面有了一些@Service等定义在其他地方,你们需要配置包扫描注解和配置文件的注解
@Configuration
@ComponentScan(value = "com.chentianyu")
@PropertySource({"classpath:one.properties"})
public class SpringConfig {
//1.定义一个方法获得要管理的对象
//2.添加@Bean,表示当前方法的返回值是一个Bean
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/xxsxpt1");
ds.setUsername("root");
ds.setPassword("qw18358174722er");
return ds;
}
}
public class App
{
public static void main( String[] args )
{
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
BookServiceImpl ctxBean = ctx.getBean(BookServiceImpl.class);
ctxBean.save();
DataSource dataSource = ctx.getBean(DataSource.class);
System.out.println(dataSource);
}
}
出现结果:
book dao init...
this service save ...
book dao save...chentianyu
{
CreateTime:"2022-05-25 21:00:33",
ActiveCount:0,
PoolingCount:0,
CreateCount:0,
DestroyCount:0,
CloseCount:0,
ConnectCount:0,
Connections:[
]
}
Process finished with exit code 0
第一种方式
package com.chentianyu.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class JdbcConfig {
//1.定义一个方法获得要管理的对象
//2.添加@Bean,表示当前方法的返回值是一个Bean
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/xxsxpt1");
ds.setUsername("root");
ds.setPassword("qw18358174722er");
return ds;
}
}
@Configuration
@ComponentScan(value = "com.chentianyu.config")
@PropertySource({"classpath:one.properties"})
public class SpringConfig {
}
第二种方式
package com.chentianyu.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class JdbcConfig {
//1.定义一个方法获得要管理的对象
//2.添加@Bean,表示当前方法的返回值是一个Bean
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/xxsxpt1");
ds.setUsername("root");
ds.setPassword("qw18358174722er");
return ds;
}
}
@Configuration
@ComponentScan(value = "com.chentianyu")
@PropertySource({"classpath:one.properties"})
@Import({JdbcConfig.class})//这样可以看出来你导入了哪个
public class SpringConfig {
}
第三方bean管理
- 使用
@Bean配置第三方bean - 将独立的配置类加入核心配置
//@Configuration public class JdbcConfig { @Value(“com.mysql.cj.jdbc.Driver”) private String diver; @Value(“jdbc:mysql://localhost:3306/xxsxpt1”) private String url; @Value(“root”) private String userName; @Value(“qw18358174722er”) private String password;
//1.定义一个方法获得要管理的对象
//2.添加@Bean,表示当前方法的返回值是一个Bean
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(diver);
ds.setUrl(url);
ds.setUsername(userName);
ds.setPassword(password);
return ds;
}
}
**自动装配: 它检测到了你的方法在做第三方Bean或者你要配置一个Bean你的形参它要给你提供,所以他要在容器中帮你找这个类型的Bean,有就给你了。(按类型装配)**
<a name="bSOUf"></a>
#### 引用类型依赖注入
- 用于类型依赖注入
```java
@Bean
public DataSource dataSource(BookService bookService){
System.out.println(bookService);
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(diver);
ds.setUrl(url);
ds.setUsername(userName);
ds.setPassword(password);
return ds;
}
- 引用类型注入只需要为bean定义的方法设置形参即可,容器会根据类型自动装配对象(前提是你有这个引用类型的Bean和spring能够找到这个Bean)
小结
- 第三方Bean管理
@Bean
- 第三方的依赖注入
- 引用类型:方法形参
- 简单类型: 成员变量
