我们经常在开发中给自己的类上面写注解就可以把Bean交给IOC容器管理并DI(依赖注入)。但是如果是第三方的类呢?不能在类上面添加注解,实现DI(依赖注入)。
Spring提供了一种更加灵活的方式来定义bean,通过@Bean注解。
我们以druid为例,使用注解对它进行管理:
步骤一:导入对应的jar包
- <dependency>
- <groupId>com.alibabagroupId>
- <artifactId>druidartifactId>
- <version>1.2.6version>
- dependency>
步骤二:新增加一个管理Druid的外部配置类-JdbcConfig。
为了方便管理,外部配置类与主配置类SpringConfig分开,并在主配置类中导入外部配置类JdbcConfig
- //不需要@Configuration,由主配置类提供
- public class JDBCConfig {
- //使用@Value注解引入值
- @Value("${datasource.username}")
- private String userName;
- @Value("${datasource.password}")
- private String password;
- @Bean
- public DruidDataSource dataSource(){
- DruidDataSource dataSource = new DruidDataSource();
- dataSource.setUsername(userName);
- dataSource.setPassword(password);
- return dataSource;
- }
- }
注意:不能使用DataSource ds = new DruidDataSource()
,因为DataSource接口中没有对应的setter方法来设置属性。
2. application.yml配置
- datasource:
- username: root
- password: 123456
步骤三:在主配置类SpringConfig上面导入Druid配置类
- @Configuration //配置的Bean注解
- @Import({JDBCConfig.class}) //使用Import导入分配置类
- public class SpringConfig {
-
- }
步骤四:从IOC容器中获取对象并打印
- @SpringBootApplication
- public class Application {
- public static void main(String[] args){
- ApplicationContext ctx = SpringApplication.run(Application.class,args);
- DruidDataSource dataSource = ctx.getBean(DruidDataSource.class);
- System.out.println("userName:"+dataSource.getUsername()+
- ",password:"+dataSource.getPassword());
- }
- }
3.1 @Bean注解
名称 | @Bean |
类型 | 方法注解 |
位置 | 方法定义上方 |
作用 | 设置该方法的返回值作为spring管理的bean, |
属性 | value默认为方法名,就是xml中的bean id |
3.2 @Import
名称 | @Import |
类型 | 类注解 |
位置 | 类定义上方 |
作用 | 导入配置类 |
属性 | value(默认):定义导入的配置类类名,当配置类有多个时使用数组格式一次性导入多个配置类 |