以初始化iotDB的SessionPool对象为例,bean对象代码
@Slf4j
@Configuration(proxyBeanMethods = false)
public class IotDbSessionConfiguration{
@Value("${spring.iotdb.username:root}")
private String username;
@Value("${spring.iotdb.password:root}")
private String password;
@Value("${spring.iotdb.ip:127.0.0.1}")
private String ip;
@Value("${spring.iotdb.port:6667}")
private int port;
@Value("${spring.iotdb.maxSize:30}")
private int maxSize;
private SessionPool sessionPool;
}
1、传统写法
通过一个方法初始化SessionPool对象,再使用时调用该方法
public void init(){
sessionPool = new SessionPool(ip, port, username, password, maxSize);
}
public void select(){
init();
}
2、使用@PostConstruct注解
ioc容器在初始化bean时,会先调用BeanPostProcessor中的postProcessBeforeInitialization方法,此时@PostContruct注解起作用
@PostConstruct
public void init(){
sessionPool = new SessionPool(ip, port, username, password, maxSize);
}
3、实现InitialzingBean接口重写方法afterPropertiesSet()
在初始化bean时调用执行,另外还可以实现DisposableBean接口重写destroy()方法,来在释放bean的时候进行一些处理
public class IotDbSessionConfiguration implements InitializingBean, DisposableBean {
//上述代码省略
......
@Override
public void afterPropertiesSet() throws Exception {
sessionPool = new SessionPool(ip, port, username, password, maxSize);
}
@Override
public void destroy() throws Exception {
if (sessionPool != null) {
sessionPool.close();
}
}
}
扩展:
由上述描述可知,@PostContruct注解执行顺序先于InitialZingBean,如果把构造方法和初始化执行方法加入,其顺序为
Constructor > @PostConstruct > InitializingBean > init-method