SpringBean的生命周期及其理解

基础回答

可以分为几个阶段,会包含比如说像加载实例化还有销毁

在加载和销毁的时候,我们可以去配置一些这种扩展,如init-method以及destory-method。

他会在Spring Bean的加载过程中会触发一些回调。

Spring的生命周期划分阶段

1. 创建前准备

在这里插入图片描述
这个阶段主要作用是Bean在开始加载之前,要从上下文和一些配置中去解析并且查找Bean有关的扩展实现

比如说像init-method,容器在初始化Bean的时候会调用的方法。destory-method容器在销毁Bean的时候会调用一些方法以及BeanFactoryPostProcessor这一类的bean加载过程中的前置和后置的一些处理扩展实现。这些类或者配置其实是Spring提供给开发者用来去实现Bean加载过程中的一些扩展。

在很多的和Spring集成的中间件也比较常见。比如说像Dubbo这样一些中间件。

2. 创建实例化

在这里插入图片描述
主要作用是通过反射去创建Bean的实例对象,并且会扫描和解析Bean声明的一些属性。

实例化一个Bean,也就是我们常说的new。

3. IOC依赖注入

在这里插入图片描述
如果被实例化的Bean存在依赖其他Bean对象的一些情况。则需要对这些依赖的Bean进行对象注入

比如常见的@Autowired以及setter注入等这样的一些配置形式,同时在这个阶段会触发一些扩展的调用。比如说常见的扩展类BeanPostProcessors用来去实现Bean初始化前后的扩展回调,以及像BeanFactoryAware等等。

按照Spring上下文对实例化的Bean进行配置,也就是IOC注入。

3.1 setBeanName实现

如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的id值。

3.2 BeanFactoryAware实现

如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory,setBeanFactory(BeanFactory)传递的是Spring工厂自身(可以用这个方式来获取其他Bean,只需在Spring配置文件中配置一个普通的Bean就可以)。

3.3 ApplicationContextAware实现

如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文(同样这个方式也可以实现步骤4的内容),但比4更好,因为ApplicationContext是BeanFactory的子接口,有更多的实现方法。

3.4 postProcessBeforeInitialization接口实现-初始化预处理

如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术

4. 容器缓存

在这里插入图片描述
容器缓存阶段主要的作用是把Bean保存到容器以及Spring的缓存中。到了这个阶段,bean就可以被开发者去使用了。这个阶段涉及到那些操作常见的像init-method,这个属性配置一些方法或者这个阶段会被调用,以及像BeanPostProcessors的后置处理器方法也会在这个阶段被触发。

4.1 init-method

如果Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法。

4.2 postProcessAfterInitialization

如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法。

注:**以上工作完成以后就可以应用这个Bean了,**那这个Bean是一个Singleton的,所以一般情况下我们调用同一个id的Bean会是在内容地址相同的实例,当然在Spring配置文件中也可以配置非Singleton。

5. 销毁实例

在这里插入图片描述
当Spring的应用上下文被关闭的时候,那么这个上下文中所有的bean会被销毁。如果存在bean实现了像DisposableBean接口或者配置了destory-method属性的一些方法,会在这个阶段被调用。

5.1 Destroy过期自动清理阶段

当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用那个其实现的destroy()方法。

5.2 destroy-method自配置清理

最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

参考资料【Java最新面试题】阿里一面|面试官:请你说说SpringBean的生命周期

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值