Spring Bean的生命周期总的来说分为四个阶段:
1.实例化
2.属性赋值
3.初始化
4.销毁
以下是部分源码解析以及运行结果:
1.目录
2.UserDao
3.MyBeanPostProcessor.java
4.applicationContext.xml
5.test测试
6.运行结果
运行结果:
1:调用构造函数UserDao()
2:注入属性userName=zhangsan
3:调用setBeanName()获取bean id,bean id=dao
:调用setBeanFactory()获取bean工厂
5:调用setApplicationContext()获取bean上下文
=====调用postProcessBeforeInitialization()=====
6:调用afterPropertiesSet()
7:调用自定义myInit()
=====调用postProcessAfterInitialization()=====
8.destroy()
9.我销毁了
一、实例化
1.将Spring进行启动,查找并加载需要被Spring管理的bean,进行Bean的实例化,实例化阶段主要是通过反射去创建bean实例对象;
1:调用构造函数UserDao()
二、属性赋值
2.Bean实例化后对将Bean的引入和值注入到Bean的属性中,实际上就是对已经实例化了的bean对象进行属性值的设定;
2:注入属性userName=zhangsan
三、实现Aware接口
3.如果Bean实现了BeanNameAware接口,则执行setBeanName方法,Spring通过调用Bean的setBeanName()方法传入当前Bean的id值;
3:调用setBeanName()获取bean id,bean id=dao
4..如果Bean实现了BeanClassLoaderAware接口,则执行setBeanClassLoader方法,传入classLoader的引用;
5..如果Bean实现了BeanFactoryAware接口,则执行setBeanFactory方法,传入当前工厂实例的引用;
4:调用setBeanFactory()获取bean工厂
6.如果Bean实现了ApplicationContextAware接口,则执行setApplicationContext方法;
5:调用setApplicationContext()获取bean上下文
三、初始化
7.如果加载了BeanPostProcessor接口,Spring就会执行postProcessBeforeInitialization()方法;
=====调用postProcessBeforeInitialization()=====
8.如果定义了初始化的方法,则会执行初始化方法;
6:调用afterPropertiesSet()
7:调用自定义myInit()
9.如果加载了BeanPostProcessor相关实现类,则执行postProcessAfterInitialization方法;
=====调用postProcessAfterInitialization()=====
四、销毁
10.如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,如果自定义了销毁方法,则会调用destroy-method这个方法进行销毁。
8.destroy()
9.我销毁了
五、SpringBean的生命周期流程图如下: