简单来说,Spring Bean的生命周期只有四个阶段:实例化 Instantiation --> 属性赋值 Populate --> 初始化 Initialization --> 销毁 Destruction。
具体来说分为以下步骤:
1.当容器启动时,Bean的实例化。Bean容器找到配置文件中Spring Bean的定义。Bean容器利用Java Reflection API创建一个Bean的实例。
2.Bean的属性赋值。利用set()方法设置一些属性值。
3.如果实现了其他*Aware接口,就调用相应的方法。
如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字。
如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。
如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory()方法,传入ClassLoader对象的实例。
4.执行BeanPostProcessor接口的postProcessBeforeInitialization方法。
5.执行InitializingBean接口的afeterPropertiesSet()方法。
6.执行配置文件中定义的init-method属性指定的方法。
7.执行BeanPostProcessor接口的postProcessAfterInitialization()方法。
8.bean存在与容器中。
9.当容器结束时,Bean要销毁时,执行DisposableBean接口的destroy()方法。
10.执行配置文件中的定义的destroy-method属性指定的方法。
11.bean销毁。
Bean的作用域
(1)singleton:默认作用域,单例bean,每个容器中只有一个bean的实例。
(2)prototype:为每一个bean请求创建一个实例。
(3)request:为每一个request请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
(4)session:与request范围类似,同一个session会话共享一个实例,不同会话使用不同的实例。
(5)global-session:全局作用域,所有会话共享一个实例。如果想要声明让所有会话共享的存储变量的话,那么这全局变量需要存储在global-session中。