Bean的生命周期主要涉及以下几个阶段:
-
实例化(Instantiation):
在这一阶段,Spring容器通过调用无参构造方法来创建bean实例。
1.项目启动后,spring委派给bean的信息读取器读取xml或注解,将每个bean标签转化为beandefinition信息对象并打包存在map集合
2.从map集合中提取出每个bean的信息对象执行工厂后处理器
3.创建出1个半成品javabean对象 -
属性注入(Dependency Injection):
Spring通过依赖注入(setter注入或构造方法注入)将配置文件中指定的属性值或依赖对象注入到bean实例中。 -
初始化(Initialization):
在属性注入完成后,如果bean实现了InitializingBean
接口,Spring将调用afterPropertiesSet()
方法。另外,如果在bean配置中指定了自定义的初始化方法,Spring也会调用该方法。
半成品javabean对象依次执行属性赋值
aware接口
后处理器before
接口初始化
属性初始化
后处理器after
并创建出完整javabean对象存在singletonObjectsmap集合中 -
使用(Usage):
在初始化完成后,bean就可以被应用程序使用了。在这个阶段,bean通常会执行它的业务逻辑。
用户调用getbean方法,从singletonObjectsmap集合中 提取到想要的对象内容 -
销毁(Destruction):
当Spring容器关闭时,如果bean实现了DisposableBean
接口,Spring将调用destroy()
方法。同样,如果在bean配置中指定了自定义的销毁方法,Spring也会调用该方法。
伴随容器的关闭,自动回收一部分javabean对象, 回收时会自动调用接口的销毁以及属性的销毁