spring bean的生命周期面试如何回答_面试maven的生命周期

天天见闻 天天见闻 2023-07-25 教育 阅读: 83
摘要: [步骤1]执行Bean的无参数构造函数,[步骤2]执行Bean的set方法,执行ClassLoader的name=sunn.misc.Launcher$AppClassLoader:[步骤5]执行beanfactoryAware中的setbeanfactory:[步骤6]执行EnvironmentAware的setEnvironment方法

前言

面试中经常会被问到Spring Bean的生命周期,有些人说记不住,看了一遍源码也是云里雾里的,那是因为只看理论,没有自己实践,如果自己亲自写代码验证一下,不管是对Spring的宏观感受,还是微观的感觉,都会有进一步的理解。 本篇会先展示代码的结果,后面再进行分析,代码的获取地址:码云地址

1、测试结果演示
spring容器初始化===========================
五月 16, 2020 3:18:44 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClasspathXmlApplicationContext@13b6d03: startup date [Sat May 16 15:18:44 CST 2020]; root of context hierarchy
五月 16, 2020 3:18:45 下午 org.springframework.beans.factory.xml.XmlBeanDeFinitionReader loadBeanDeFinitions
信息: Loading XML bean deFinitions from class path resource [applicationContext.xml]
【步骤1】执行Bean的无参构造函数
【步骤2】执行Bean的set方法,设置name属性值:coolsummermoon
【步骤2】执行Bean的set方法,设置sex属性值:man
【步骤3】执行BeanNameAware中setBeanName方法,beanName值:iocBeanLifeService
【步骤4】执行BeanClassLoaderAware中setBeanClassLoader,ClassLoader的name = sun.misc.Launcher$AppClassLoader
【步骤5】执行beanfactoryAware中setbeanfactory,beanfactory中是否包含IocBeanLifeService:true
【步骤6】执行EnvironmentAware的setEnvironment方法
【步骤7】执行ResourceLoaderAware的setResourceLoader方法,Resource File Name=applicationContext.xml
【步骤8】执行ApplicationEventPublisherAware中setApplicationEventPublisher方法
【步骤9】执行ApplicationContextAware的setApplicationContext方法,Bean DeFinition Names=[iocBeanLifeService, org.springframework.context.annotation.CommonAnnotationBeanPostProcessor#0, ioc.CustomerBeanPostProcessor#0]
【步骤10】执行BeanPostProcessor中postProcessBeforeInitialization方法,beanName=iocBeanLifeService
【步骤11】执行postconstruct注解标注的方法
【步骤12】执行InitializingBean的afterPropertiesSet方法
【步骤13】执行配置的init-method
【步骤14】执行BeanPostProcessor的postProcessAfterInitialization方法,beanName=iocBeanLifeService
五月 16, 2020 3:18:45 下午 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing org.springframework.context.support.ClasspathXmlApplicationContext@13b6d03: startup date [Sat May 16 15:18:44 CST 2020]; root of context hierarchy
spring容器初始化完毕========================
从容器中获取Bean
IocBeanLifeService{ 
name='coolsummermoon', sex='man'}
spring容器准备关闭==========================
【步骤15】执行preDestroy注解标注的方法
【步骤16】执行disposableBean接口的destroy方法
【步骤17】执行配置的destroy-method
spring容器完成关闭===========================
Process finished with exit code 0
2、结果分析

2.1、上面的结果,我们可以初步分四个阶段:

  1. Bean的实例化阶段
  2. Bean的设置属性阶段
  3. Bean的 初始化阶段
  4. Bean的销毁阶段

2.2、在初始化阶段,有个特别重要的接口BeanPostProcessor,在初始化前、后调用:

spring bean的生命周期面试如何回答_面试maven的生命周期

2.3、在设置属性阶段后,postProcessBeforeInitialization方法执行前,会执行很多Aware类型的接口,这种类型接口作用是加载资源到spring容器中,Aware前面的名字就对应哪种资源,依次加载的是:

  1. BeanNameAware
  2. BeanClassLoaderAware
  3. beanfactoryAware
  4. EnvironmentAware
  5. ResourceLoaderAware
  6. ApplicationEventPublisherAware
  7. ApplicationContextAware

看到这里应该明白beanfactory和ApplicationContext的区别了: beanfactoryAware之前加载的资源都是公共的。beanfactoryAware后面加载的资源都是ApplicationContext独有的。

2.4、初始化方式有三个,分别是:

  1. InitializingBean的afterPropertiesSet方法
  2. postconstruct注解标注的方法
  3. 配置的init-method

上面的三个方法效果都是一样的,开发中选择其中一种方式就行,一般我们选择2、3方法中的一个。

2.5、容器销毁的方式有三个,分别是:

  1. preDestroy注解标注的方法
  2. disposableBean接口的destroy方法
  3. 配置的destroy-method

上面的三个方法效果都是一样的,开发中选择其中一种方式就行,一般我们选择1、3方法中的一个。

3、
其他相关
小学数学知识点汇总+练习:升和毫升

小学数学知识点汇总+练习:升和毫升

作者: 天天见闻 时间:2024-03-05 阅读: 38
今天小编整理了【升和毫升】知识点汇总+练习题,家长可以给孩子收藏起来,学习积累。为了准确测量或计算容器的容量,要用统一的容量单位:升或毫升。计量水、油、饮料等液体的多少,通常用升作单位,常用符号“L”表示。计量比较少的液体,常用毫升作单位,常用符号“mL”表示...
全顺电脑插口在什么位置 全顺电脑接口在什么地方

全顺电脑插口在什么位置 全顺电脑接口在什么地方

作者: 天天见闻 时间:2023-12-23 阅读: 72
福特的新全顺不带USB端口福特的新全顺不带USB端口。江陵全顺车一般配备与手机连接的USB数据电缆,使用数据电缆连接,连接后需按MEDLA按钮。然后,打开你的手机进入播放器,只需直接点击播放的音乐播放。全在地方保险丝盒全顺保险丝盒,手柄左下角有一个保险丝盒,有一个保险丝盒,把...
腾讯文章采集接口,采集接口腾讯文章怎么用

腾讯文章采集接口,采集接口腾讯文章怎么用

作者: 天天见闻 时间:2023-11-03 阅读: 62
主编今天为您展示腾讯文章收集界面的经验。腾讯文章收集界面是一个强大的工具,可以帮助高效地进行内容收集。下面从九个方面详细介绍该界面的使用方法和注意事项。 1。接口概述 腾讯文章收集界面是腾讯开发的用于实时收集互联网上文章信息的工具。通过这个界面,我们可以快速获取各种文章的标题、摘要、作者、发布时间等信息,大大提高了我们的工作效率。 2。接口调用方式 使用腾讯文章收集界面,可以选择通过API调用或使用SDK进行集成。API调用方式灵活简便,适用于各种应用场景,但SDK集成方式更加方便,在开发过程中可以快速导入使用。...

用了11年的iPhone充电接口,怎么就要换了?

作者: 天天见闻 时间:2023-11-02 阅读: 83
·欧盟最小国家的选举影响了全球数十亿人的生活。几乎所有的科技行业都将有史以来第一次能够使用相同种类的传输线路和充电器。 ·无论是“闪电”还是USB-C接口,都可能只有中继站。随着无线传输和无线充电方式的不断改进和推广,充电接口的问题,可能将永远成为历史。 ...
硬盘序列号如何识别

硬盘序列号如何识别

作者: 天天见闻 时间:2023-10-04 阅读: 61
请阅读企业硬盘序列号识别正文。是硬盘号码。其识别方法为:“IC+磁盘大小+硬盘高度+容量+接口类型+系列型号+转速+缓存容量”系列硬盘编号规则。我拓号多为“系列号+该系列硬盘最大容量+顶部+容量+接口类型+磁盘头数”。在接口规范的硬盘上添加编号资料,不能说是遗憾的。编号显示为“系列型号+转速+容量+缓存+头数+接口类型”。...
微信公众平台:调用隐私接口需用户知情并同意小程序隐私保护规则

微信公众平台:调用隐私接口需用户知情并同意小程序隐私保护规则

作者: 天天见闻 时间:2023-10-03 阅读: 74
[环球网科技综合报道]8月15日,微信公众平台运营中心公布的小程序隐私保护指引设置公告显示,为规范开发者用户个人信息处理行为,保障用户合法权益,自2023年9月15日起,对于处理用户个人信息的小程序开发者,微信要求。只有当开发者主动向平台发出用户阅读并同意小程序隐私保护指南等信息处理规则时,才能调用微信提供的隐私界面。 开发人员首先需要确定小部件是否涉及处理用户个人信息;如果涉及,则配置用户隐私许可窗口;只有声明在平台“小部件用户隐私保护指南”中处理的用户个人信息,才能调用平台提供的相应接口或组件(隐私相关接口链接)。...
我来说两句

年度爆文