Spring注解驱动开发(二) 组件生命周期
Bean的生命周期
Bean的 创建 --- 初始化 --- 销毁
容器可以帮我们管理Bean的生命周期,不过我们可以自定义初始化和销毁方法,容器在bean进行到生命周期的初始化和销毁过程时调用自定义的方法(hooks?)。
关于对象的创建
单实例:容器启动时创建@Lazy除外
多实例:获取时创建
初始化:对象创建完成并赋值后调用初始化方法
销毁: 单实例容器关闭时,销毁。多实例,容器不调用销毁方法
1.XML版本
<Bean init-method="init" destory-method="destory"></Bean>
2.注解版本
@Bean(initMethod="init",destoryMethod="destory")
3.InitializingBean 与 DisposableBean 接口
实现这两个接口
- InitializingBean :
afterPropertiesSet(){} - DisposableBean :
destory(){}
4. @PostConstruct 与 @PreDestroy
这两个来自于 JSR250 规范。使用时标注在相应的方法上。例如
@Component
public class Cat{
@PostConstruct
public void init(){}
@PreDestroy
public void destroy(){}
}
5. BeanPostProcessor Bean的后置处理器
BeanPostProcessor是一个接口
public interface BeanPostProcessor {
@Nullable
default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { // 在任何初始化动作之前,包括InitializingBean
return bean;
}
@Nullable
default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { //在初始化动作之后
return bean;
}
}
顺序问题
Cat //构造器
BeanPostProcessor beforecat // beforeBeanProcessor
PostConstruct // @PostConstruct
afterPropertiesSet init // InitializingBean
@Bean init // 自定义
BeanPostProcessor after cat // afterBeanBrocessor

任何脱离整体的细节都是耍流氓

浙公网安备 33010602011771号