管理第三方 bean

一、创建 Bean

  • SpringConfig 中添加要管理的 bean
  1. 创建一个方法,方法名就是这个 bean 的名称
  2. 在方法上面添加一个 @Bean 注解,表示当前方法的返回值是一个 bean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
public class SpringConfig {

// 定义 bean
@Bean
public DataSource dataSource() {
DuridDataSource ds = new DruidDataSource("xxx");
ds.setDriverClassName("xxx");
ds.setUrl("xxx");
ds.setUsername("xxx");
ds.setPassword("xxx");
return ds;
}
}

二、使用 Bean

  • 通过 getBean 获取自定义的 Bean 即可
1
2
3
AnnototaionConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);

DataSource datSource = ctx.getBean(DataSource.class);

三、抽离单独配置类

  • 为了避免所有 bean 都写在一个文件里,所以需要拆出新的配置类

1. 使用 @Configuration 注解

  1. 抽离出配置类为: JdbcConfig, 并且使用 @Configuration 注解
  2. SpringConfig 中添加 @ComponentScan 注解,并且扫描配置类
  • JdbcConfig.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
public class JdbcConfig {

// 定义 bean
@Bean
public DataSource dataSource() {
DuridDataSource ds = new DruidDataSource("xxx");
ds.setDriverClassName("xxx");
ds.setUrl("xxx");
ds.setUsername("xxx");
ds.setPassword("xxx");
return ds;
}
}
  • SpringConfig.java
1
2
3
@Configuration
@ComponentScan("cn.pangcy.config")
public class SpringConfig {}

注意:
不推荐使用这种方法,因为你无法清晰的知道道理导入了那些配置类

2. 使用 @Import 注解

  1. 抽离出配置类为: JdbcConfig
  2. SpringConfig 中,使用 @Import 注解导入配置类,
    1. @Import 的参数是配置类
    2. @Import 注解只允许写一次,如果有多个配置类,传入数组{JdbcConfig.class, ...}
  • JdbcConfig.java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class JdbcConfig {

// 定义 bean
@Bean
public DataSource dataSource() {
DuridDataSource ds = new DruidDataSource("xxx");
ds.setDriverClassName("xxx");
ds.setUrl("xxx");
ds.setUsername("xxx");
ds.setPassword("xxx");
return ds;
}
}
  • SpringConfig.java
1
2
3
@Configuration
@Import(JdbcConfig.class)
public class SpringConfig {}

四、第三方 bean 依赖注入

1. 简单类型依赖注入

  • 通过 @PropertySource 注解扫描配置文件
  • 通过 @Value 注入简单类型依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@PropertySource("/jdbc.properties")
public class JdbcConfig {

@Value("${jdbc.driver}")
private String driverClassName;

@Value("${jdbc.url}")
private String url;

@Value("${jdbc.username}")
private String username;

@Value("${jdbc.password}")
private String password;

@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driverClassName);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
}

2. 引用类型依赖注入

  • 引用类型注入只需要为 bean 定义方法设置形参即可,容器会根据类型自动装配对象
  • 注意: 形参的类型必须已经被设置为 bean
1
2
3
4
5
6
7
8
9
public class JdbcConfig {
@Bean
public DataSource dataSource(BookService bookService){
System.out.println(bookService);
DruidDataSource ds = new DruidDataSource();
// TODO ...
return ds;
}
}

管理第三方 bean
https://blog.pangcy.cn/2023/04/06/后端编程相关/java/spring/管理第三方 bean/
作者
子洋
发布于
2023年4月6日
许可协议