注解开发(2)
Notes
Bean管理
bean作用范围
使用**@Scope**定义bean作用范围
|
bean生命周期
使用@PostConstruct,@PreDestory定义bean生命周期
(该注解已经在java11以上被删除,了解即可)
|
依赖注入
引用类型
使用**@Autowired**注解开启自动装配模式(按类型)
public class BookServiceImpl implements BookService { |
自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法
自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法
如果想使用名称装配(bean不唯一情况)可以使用@Qualifiler注解(必须配合@Autowired)
public class BookServiceImpl implements BookService {
BookDao bookDao;
public void save() {
bookDao.save();
}
}简单类型
使用**@Value**实现简单类型注入
public class BookServiceImpl implements BookService {
private String connectionNum;
}这里的值通常会来自于外部的property文件,避免值写死
在配置类中使用**@PropertySource**加载property文件
//多个配置文件时也使用数组 @PropertySource({"jdbc.properties"},{"jdbc.properties"})
public class SpringConfig {
}
//注入修改
//name为配置文件中的配置项
public class BookServiceImpl implements BookService {
private String connectionNum;
}注意:路径仅支持单一文件配置,多文件请使用数组格式配置,且不允许使用通配符*
第三方bean管理 @Bean
整合框架时都需要@Bean来管理别人写的对象
使用**@Bean**配置第三方bean
public class JdbcConfig {
//定义一个方法获取要管理的bean
//添加@Bean,表示当前方法的返回值是一个bean
public DataSource dataSource() {
ComboPooledDataSource dataSources = new ComboPooledDataSource();
dataSources.setDriverClass("com.jdbc.mysql.Driver");
dataSources.setJdbcUrl("jdbc:mysql://localhost:3306/springWeb");
dataSources.setUser("root");
dataSources.setPassword("root");
return dataSources;
}
}这里本应该是写在核心配置类中的,但是不建议这样做,管理大量第三方bean时不方便,所以单独创建了JdbcConfig类来管理
然后使用**@Import**将它导入到核心配置类中(导入式)
同样@Import只允许写一次,多个导入使用数组
public class SpringConfig {
}还有一种扫描式,即为JdbcConfig加上@Configuration注解,在核心文件使用组件扫描该类。但是不推荐(第三方bean信息不透明),这不具体展开。
第三方bean依赖注入
简单类型注入:成员变量
上一段中的简单类型仍然是写死到代码中的,这里做一下改写
public class JdbcConfig {
private String driver;
private String url;
private String userName;
private String password;
//定义一个方法获取要管理的bean
//添加@Bean,表示当前方法的返回值是一个bean
public DataSource dataSource() throws PropertyVetoException {
ComboPooledDataSource dataSources = new ComboPooledDataSource();
dataSources.setDriverClass(driver);
dataSources.setJdbcUrl(url);
dataSources.setUser(userName);
dataSources.setPassword(password);
return dataSources;
}
}引用类型依赖注入:方法形参
只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象
public DataSource dataSource(BookService bookService) {
bookService.save();
ComboPooledDataSource dataSources = new ComboPooledDataSource();
return dataSources;
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hspace!