BeanFactroy 中Bean生命周期
Spring 為Bean通過了很多生命周期的回調(diào)方法,允許我們對其進(jìn)行控制
- BeanPostProcessor : Bean初始化前后的回調(diào)
初始化前:Object postProcessBeforeInitialization(Object bean, String beanName) 初始化后:Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
- InstantiationAwareBeanPostProcessor: 拓展BeanPostProcessor客冈,增加實例化時回調(diào)
實例化前:Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException;
實例化后:boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException; 如果返回false,別的InstantiationAwareBeanPostProcessor將不會處理這個實例
設(shè)置屬性:PropertyValues postProcessPropertyValues(
PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeansException;
InstantiationAwareBeanPostProcessorAdapter: Adapter類硕并,提供結(jié)構(gòu)的默認(rèn)實現(xiàn)
方法回調(diào)順序
生命周期.PNG
Bean通過xml聲明是通過init-method和destroy-method屬性配置控制初始化饮焦,和銷毀,與實現(xiàn)接口InitializingBean與DisposableBean是一樣的喻奥,這樣不需要實現(xiàn)Spring的接口僵朗,不與Spring耦合赖欣。
- InitDestroyAnnotationBeanPostProcessor
扶著處理@PostConstruct初始化后 @PreDestroy 銷毀前進(jìn)行處理。ApplicationContext默認(rèn)裝載該處理器验庙。
ApplicationContext中Bean 生命周期
捕獲11.PNG
與BeanFactory周期不同的是如果bean實現(xiàn)了ApplictionContextAware,會多調(diào)用一個setApplicationContext方法.
當(dāng)實現(xiàn)多個BeanPostProcess是顶吮,最好實現(xiàn)org.springframework.core.Ordered 對執(zhí)行順序進(jìn)行控制。
ApplicationContext會利用放射識別出配置中的BeanPostProcess自動注冊到上下文粪薛,BeanFactory需要手工進(jìn)行注冊云矫。