(面试)史上最通俗易懂的(Spring的bean)生命周期讲解

注意:重在理解,用自己的理解来概述,最好理解后自己总结一篇博客哦~

以下也是个人看了多人的博客后总结出来的,个人觉得面试答上来下面的重点就已经可以了,毕竟每个人有每个人的想法~

建议先看图片,再看文字哦~

=========================================================

第一阶段(创建Bean前的准备)

Bean在开始加载之前从上下文和一些配置中解析并查找Bean有关的一些扩展的实现

1:比如java方法本身只有在spring初始化加载完之后才会执行,但是可以通过配置=======》innt-method来改变它的一个规则,在后面容器初始化之前就会与你配置的innt-method指定的方法一起执行,还有destroy-method,容器在销毁Bena的时候调用的一些方法。(简单来说,就好比玩王者荣耀有5位队友(方法),个dog玩个云中君,开局4位队员还在泉水困着,你就先飞出去了)

2:还有BeanFactoryPostProcessor这一类的bean对加载过程中对前置和后置扩展的处理和实现。然而,这些类是spring提供给开发者添加扩展所用的,比如像添加Dubbo这样一类的中间件。还有BeanFactoryProcessor本身会比Bean先实例化。简单来说(你家有个智能洗衣机(BeanFactoryPostProcessor)你已经提前把要洗的衣物(中间件)放进去了,洗衣机启动后,洗衣机会帮你清洗衣服,但是,洗衣机肯定是先洗再脱水,先洗指的是beanFactoryPostProcessor处理你扩展的组件,脱水指的是bean的实例化,以洗衣机的生命周期概述了BeanFactoryPostProcessor) 

​​​​​​​

第二阶段(创建实例阶段):

通过反射创建bean的实例对象,并且会扫描和解析一些Bean扫描的属性和方法 ,算是正式的创建了Bean,但是这个阶段的Bean还不对外可用,因为还没有依赖注入,机制不允许。

第三阶段(依赖注入):

1: 如果被实例化的bean依赖于其他的bean对象,则会自动或者手动配置要被注入的bean来注入对应的bean对象。简单来说(在类中有一个private User user1;的一个对象属性,使用@Autoired(自动装配)给它注入,private User user1;是要被注入的Bean。而@Autoired会查找在标注了类似@Component之类的注解的类,如果有名为User的类,则注入,没有就报错呗,除非@Autoired(required = false)表示哪怕没有User也不报错)。

2 : 在这个阶段还会触发一些扩展的调用,比如说上述所说BeanFactoryPostProcessorBean创建之前就已经对中间件做好了处理实现,然而在依赖注入这个阶段,会触发BeanPostProcessors来回调BeanFactoryPostProcessor已经帮你实现的Bean,简单来说(在家做饭,凉菜(中间件)已经提前调好,已经可以吃了,但是要等热菜(bean)炒好之后一起端上桌)

第四阶段(容器缓存阶段):

将已经准备好的Bean保存到Spring的容器以及缓存中,现在的bean已经可以使用了,在这个阶段还会涉及到一些操作,比如第一阶段所说的innt-method所配置的要先执行的方法,在这个阶段就会调用,还有BeanPostProcessors后置处理器的方法也会在这个阶段被触发。(就好比上述所说,菜都上好了,等人来齐(一些配置的方法和组件的方法来齐),再开吃)

第五阶段(销毁Bena):

当Spring应用上下文被关闭的时候,上下文中的Bean都会被销毁,如果存在的某些Bean实现了DisposableBena的接口或者配置了上述所说的destory-method的一些方法,则会在这个阶段被调用。

逻辑图大概

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值