Bean
生命周期概述演示
bean -创建- 初始化- 销毁
容器管理bean生命周期
我们可以自定义初始化和销毁方法
初始化-对象创建完成并赋值好,初始化(单实例)
销毁- 单实例:容器关闭时,多实例:手动
指定方法
1.指定初始化@Bean(initMethod = “init”, destroyMethod = “destroy”)
2.继承InitializingBean, DisposableBean接口,实现方法,可以定义初始化和销毁逻辑
3.方法上注解@PostConstruct, @PreDestroy
4.BeanPostProcessor [接口],bean后置处理器,bean初始化前后工作
postProcessBeforeInitialization初始化前;postProcessAfterInitialization初始化后
IOC容器启动
创建ioc,AnnotationConfigApplicationContext构造器 --> refresh方法初始化–>finishBeanFactoryInitialization初始化所有单实例bean–>preInstantiateSingletons–>getBean–doGetBean–>doCreateBean–>(populateBean赋值先)initializeBean–>前置处理applyBeanProcessBeforeInitialization+InitMethods执行初始化+后置处理applyBeanPostProcessAfterInitialization
BeanPostProcessor 应用
ApplicationContextAwareProcessor
bean实现ApplicationContextAware 回调setApplicationContext方法,传入IOC容器对象
BeanValidationPostProcessor 校验页面提交值,在初始化前后分别Override方法执行doValidate
InitDestroyAnnotationBeanPostProcessor 处理注解 ,在applyBeanProcessBeforeInitialization里找到方法的注解,如init,调用反射,执行init
AutoWiredAnnotationBeanPostProcessor @Autowired
Aware接口
回调函数,在创建对象的时候调用接口规定的方法注入组件(bean)
例如ApplicationContextAware
setApplicationContext(ApplicationContext applicationContext)传入容器,保存在对象中使用,为对象增加组件
ApplicationContextAwareProcessor处理函数,继承自BeanPostProcessor