【Spring源码】 BeanPostProcessor底层原理分析
注:其他一些spring源码解读,如果有需要,可以参考:
- 【spring源码】spring容器IOC底层源码分析
- 【spring源码】AOP底层源码分析
- 【spring源码】spring声明式事务底层源码分析
- 【spring源码】ApplicationListener事件监听底层原理
1.Spring中bean的生命周期
- 今天不聊那么复杂,其实bean的生命周期就这四步:实例化、初始化、使用、销毁
2.Spring注解开发指定初始化和销毁的方式
- 大概以下四种方式:
2.1 @Bean指定init-method和destroy-method
- 举例Demo:
- bean实体类
/**
* bean的生命周期
*
* @author wangjie
* @version V1.0
* @date 2020/1/6
*/
public class Food {
public Food(){
System.out.println("food constructor");
}
public void init(){
System.out.println("food init");
}
public void detory(){
System.out.println("food detory");
}
}
- 配置类
@Configuration
public class ConfigOfLifeCycle {
@Bean(initMethod = "init",destroyMethod = "detory")
public Food food(){
return new Food();
}
}
- 测试用例:
/**
* IOC生命周期测试
* 注意:单实例bean测试,多实例bean容器创建完之后就不再管了
* @author wangjie
* @version V1.0
* @date 2020/1/6
*/
public class IOCTest_LifeCycle {
@Test
public void test01(){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ConfigOfLifeCycle.class);
System.out.println("容器加载完成");
applicationContext.close();
}
}
- 运行结果:
food constructor
food init
容器加载完成
food detory
2.2 通过让Bean实现InitializingBean(定义初始化逻辑)DisposableBean(定义销毁逻辑)
- 举例Demo:
- bean实体类
/**
* todo
*
* @author wangjie
* @version V1.0
* @date 2020/1/6
*/
@Component
public class Dog implements InitializingBean, DisposableBean {
public Dog(){
System.out.println("dog constructor");
}
@Override
public void de