一、第三方Bean管理
我们经常在开发中给自己的类上面写注解就可以把Bean交给IOC容器管理并DI(依赖注入)。但是如果是第三方的类呢?不能在类上面添加注解,实现DI(依赖注入)。
Spring提供了一种更加灵活的方式来定义bean,通过@Bean注解。
我们以druid为例,使用注解对它进行管理:
二、管理第三方Bean的步骤
步骤一:导入对应的jar包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</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(默认):定义导入的配置类类名,当配置类有多个时使用数组格式一次性导入多个配置类 |