目录
InstantiationAwareBeanPostProcessor
Spring就是一个用来创建和管理 类对象的Map。
这个Map咱们称为容器。
这个容器本身会在一个类中作为静态变量存在,那么这个容器本身就有他的生命周期。
容器会对某个Bean创建对象,这个对象也具有自己的生命周期。
所以容器生命周期分为:容器本身的生命周期 + Bean的生命周期。
容器生命周期图
生命周期解析
第一步:容器构造,必要的工具和类创建
BeanFactory 处理器 创建
Bean 处理器创建
BeanInstantiaction Bean实例化 处理器 创建
预留接口:BeanFactory.postProcess
第二步:实例化
HelloWord helloword = new HelloWord();
创建示例,并调用构造方法
预留接口:
BeanInstantiaction befor实例化,构造方法之前
BeanInstantiaction after 实例化,构造方法之后
BeanInstantiaction 处理属性值
第三步:初始化和属性注入
1. 框架初始化:注入属性,调用set方法
预留接口:
setBeanName 获取bean名称接口
setBeanFactory 获取bean工厂类接口
2.自定义初始化init-method
自定义 初始化方法
在所有框架处理之后执行
以及:设置完属性后框架调用
afterPropertiesSet 属性设置之后
预留接口:
执行init-method之前,BeanPostProcesser.beforeInitialization
执行afterPropertiesSet 之后,BeanPostProcesser.afterInitialization
析构
destroy-method方法
接口:DisposableBean.destroy()方法
容器
BeanFactoryPostProcessor
org.springframework.beans.factory.config.BeanFactoryPostProcessor
方法:
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
throws BeansException;
可以获取BeanFactory。
Bean外
BeanPostProcessor
Bean初始化前后
org.springframework.beans.factory.config.BeanPostProcessor
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException
Initialization 初始化
InstantiationAwareBeanPostProcessor
实例化前后
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor
extends BeanPostProcessor
Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName)
throws BeansException
boolean postProcessAfterInstantiation(Object bean, String beanName)
throws BeansException
PropertyValues postProcessPropertyValues(
PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName)
throws BeansException
Instantiation 实例化
Bean内
BeanNameAware
获取Bean Name
org.springframework.beans.factory.BeanNameAware
void setBeanName(String name);
BeanNameAware.setBeanName(String name)
BeanFactoryAware
获取BeanFactory
org.springframework.beans.factory.BeanFactoryAware
void setBeanFactory(BeanFactory beanFactory) throws BeansException;
BeanFactoryAware.setBeanFactory(BeanFactory beanFactory)
InitializingBean
属性设置后调用。
org.springframework.beans.factory.InitializingBean
void afterPropertiesSet() throws Exception;
InitializingBean.afterPropertiesSet()
DisposableBean
org.springframework.beans.factory.DisposableBean
void destroy() throws Exception;
DisposableBean.destroy()
init-method&destroy-method
@Bean 注解 或者XML中配置Bean指定
@Bean
initMethod
destroyMethod
<bean id="initSequenceBean "
class="com.example.InitSequenceBean" init-method="initMethod"/>
end