使用注解管理spring bean生命周期
Bean生命周期注解大致有这么多,创建并注册Bean,bean初始化与销毁,以及scope、conditional、primary、lazy等注解。
bean的初始化与销毁
BeanPostProcessor工作原理
我们给自定义的postProcessBeforeInitialization方法打上断点,debug执行,通过IDEA拿到方法调用栈。分析如下
// 初始化属性
populateBean(beanName, mbd, instanceWrapper);
exposedObject = initializeBean(beanName, exposedObject, mbd) {
invokeAwareMethods(beanName, bean);// BeanAware方法
applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName); // 初始化前执行
invokeInitMethods(beanName, wrappedBean, mbd); // 初始化bean-->内部会执行init方法。
applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName); // 初始化后执行
}
Spring内部对BeanPostProcessor很广泛的应用。例如bean的赋值、将容器注入到bean、@Autowired、生命周期注解@PostConstruct、@Async等功能的实现,很重要。
以ApplicationContextAware为例分析,给赋值位置打断点,查看堆栈。
版权声明:本文为博主原创文章,未经博主允许不得转载。