Bean生命周期:指的就是Bean从创建到销毁的整个过程!四个大步骤 :
1.实例化
a.通过反射去推断构造函数进行实例化
b.实例工厂、静态工厂
2.属性注入
a.解释自动装配 (byname bytype constractor none @Autowired) DI的体现
b.循环依赖
3.初始化
a.调用XXXAware回调(BeanNameAware、BeanClassLoaderAware、BeanFactoryAware)
b.调用初始化生命周期回调(三种)
c.如果bean实现aop,会创建动态代理
4.销毁
a.在spring容器 关闭的时候进行调用
b.调用销毁生命周期回调
下图展示了bean装载到Spring应用上下文的一个典型的生命周期过程。
五步骤 -->> 七步骤 -->> 十步骤 过程分析:
Bean的 生命周期 十步骤总结:
相关注释:
其实这些都是扩展口,spring提供了很多,9销毁前可做回收资源等操作,4、5中间还有个@PostConstruct注解属于Servlet规范Spring也支持,7阶段bean已经准备好了可用于AOP扩展;
步骤 7 和步骤10,就是 spring 对外提供的一些扩展能力,提供给开发使用的,比如 Aware 接口,BeanPostProcessor接口,InitializingBean 接口以及DisposableBean接口,分别在 bean 初始化前,初始化后,销毁前。
b站其他视频参考 版本:
SpringBean的生命周期大致上分为五个阶段:
创建前准备:Bean在开始加载之前要从上下文和一些配置中去解析并且查找Bean有关扩展的实现,比如像‘init-method’,容器在初始化Bean的时候或调用的一个方法,destroy-method,容器在销毁Bean的时候会调用的一些方法,以及BeanFactoryPostProcessor这一类的Bean加载过程中的一些前置和后置的一些处理扩展实现,这些类和配置其实是Springr提供给开发者用来去实现Bean加载过程中的一些扩展,在很多和Spring集成的中间件也比较常见,比如Dubbo,这样一些中间件。
创建实例化:这个阶段主要作用是通过反射去创建Bean的实例对象,并且会扫描和解析Bean声明的一些属性
依赖注入:如果被实例化的Bean存在依赖其他Bean对象的一些情况,则需要对这些依赖的Bean进行对象注入,比如常见的@Autowired,以及setter注入等这样一些配置形式,同时在这个阶段会触发一些扩展的调用,比如说常见的扩展类BeanPOSTProcessors用来去实现Bean初始化前后的扩展回调,以及像BeanFactoryAware等等
容器缓存:主要是把Bean保存到容器以及Spring缓存中,到这个阶段的Bean就可以被开发者使用了,这个阶段涉及到的操作像init-method这个属性配置一些方法或者这个阶段会被调用,以及像BeanPOSTProcessors的后置处理器方法也会在这个阶段被触发
销毁实例:当Spring的应用上下文被关闭的时候,那么这个上下文中所有的Bean会被销毁,如果存在了Bean存在了DisposableBean接口或者配置了destroy-method属性的一些方法会在这个阶段被调用
补充图: