任何对象的生命周期都离不开实例化, 使用, 销毁这三个步骤。
Spirng中的Bean的生命周期也是如此,不过Spring给Bean的生命周期增加了很多的拓展点,供用户去使用,下面来具体介绍一下。
Spring去读取指定的配置文件或者解析注解来获取Bean的定义信息,在容器内部生成BeanDefinition,经过一些BeanFactoryPostProcessor来处理这些信息,比如把文件中的${jdbc.username}这种表达式解析成具体的值,有了BeanDefinition之后,再通过反射的方式去创建这个对象。
Spring在容器中寻找这个Bean所依赖的其他对象,将其引用填充到这个对象的成员变量。
在第二步依赖注入的时候,只会注入一些普通的对象,并不能注入像ApplicationContext、BeanFactory、BeanName 这些对象,这种对象必须通过实现相关的Aware接口来注入。
在这里会开始真正的初始化,会先调用BeanPostProcessor的前置方法。
调用一系列的初始化方法,执行用户指定的初始化方法,通过init-method这个属性配置。如果这个类实现了initializingBean接口的话,还回去调用afterPropertySet()方法。
执行完这个方法,Bean就算真正的创建完毕了,Spring的Aop也是通过这个方法来实现的,会为这个对象创建一个代理的对象,并将这个对象放进容器中。后面就是使用对象,最后销毁对象了。