BeanFactroy 中Bean生命周期
Spring 為Bean通過了很多生命周期的回調(diào)方法,允許我們對其進行控制
- 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)的默認實現(xiàn)
方法回調(diào)順序
生命周期.PNG
Bean通過xml聲明是通過init-method和destroy-method屬性配置控制初始化,和銷毀,與實現(xiàn)接口InitializingBean與DisposableBean是一樣的,這樣不需要實現(xiàn)Spring的接口,不與Spring耦合。
- InitDestroyAnnotationBeanPostProcessor
扶著處理@PostConstruct初始化后 @PreDestroy 銷毀前進行處理。ApplicationContext默認裝載該處理器。
ApplicationContext中Bean 生命周期
捕獲11.PNG
與BeanFactory周期不同的是如果bean實現(xiàn)了ApplictionContextAware,會多調(diào)用一個setApplicationContext方法.
當實現(xiàn)多個BeanPostProcess是,最好實現(xiàn)org.springframework.core.Ordered 對執(zhí)行順序進行控制。
ApplicationContext會利用放射識別出配置中的BeanPostProcess自動注冊到上下文,BeanFactory需要手工進行注冊。