一、创建 Bean
- 在
SpringConfig
中添加要管理的 bean
- 创建一个方法,方法名就是这个 bean 的名称
- 在方法上面添加一个
@Bean
注解,表示当前方法的返回值是一个 bean
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Configuration public class SpringConfig {
@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
注解
- 抽离出配置类为:
JdbcConfig
, 并且使用 @Configuration
注解
- 在
SpringConfig
中添加 @ComponentScan
注解,并且扫描配置类
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Configuration public class JdbcConfig {
@Bean public DataSource dataSource() { DuridDataSource ds = new DruidDataSource("xxx"); ds.setDriverClassName("xxx"); ds.setUrl("xxx"); ds.setUsername("xxx"); ds.setPassword("xxx"); return ds; } }
|
1 2 3
| @Configuration @ComponentScan("cn.pangcy.config") public class SpringConfig {}
|
注意:
不推荐使用这种方法,因为你无法清晰的知道道理导入了那些配置类
2. 使用 @Import
注解
- 抽离出配置类为:
JdbcConfig
SpringConfig
中,使用 @Import
注解导入配置类,
@Import
的参数是配置类
@Import
注解只允许写一次,如果有多个配置类,传入数组{JdbcConfig.class, ...}
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class JdbcConfig {
@Bean public DataSource dataSource() { DuridDataSource ds = new DruidDataSource("xxx"); ds.setDriverClassName("xxx"); ds.setUrl("xxx"); ds.setUsername("xxx"); ds.setPassword("xxx"); return ds; } }
|
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(); return ds; } }
|