阿里面试:谈谈SpringBean生命周期?哪8大阶段?

文摘   2024-09-23 12:59   四川  

关注mikechen的架构笔记十余年BAT架构经验倾囊相授


大家好,我是mikechen。

Bean的生命周期经常在大厂面试中被考察,下面详解具体bean生命周期的8大阶段@mikechen


最新mikechen原创超30万字《阿里架构师进阶专题合集》和《最全大厂面试题及答案总结》,请关注本公众号【mikechen的架构笔记】,后台回复:资料,即可领取。


1.实例化(Instantiation)

在这个阶段,Spring容器根据配置文件或注解,通过调用bean类的构造函数来创建bean的实例,这是bean生命周期的起始点。

实例化可以通过以下方式完成:

  • 构造函数实例化: Spring容器调用bean类的构造函数来创建实例,这通常是默认的实例化方式。

  • 静态工厂方法实例化: 如果bean配置了静态工厂方法,Spring将调用该方法来获取实例。

在实例化阶段,还没有注入任何属性值或执行其他的初始化操作,实例化完成后,bean实例处于“原始”状态,没有任何属性被设置。

2.属性赋值(Populate properties)

一旦bean实例化完成,Spring容器会根据配置文件或注解,自动将属性值注入到bean实例中。

属性注入可以通过以下几种方式实现:

  • Setter方法注入: Spring容器会查找bean中的setter方法,然后调用这些方法并传递相应的属性值。

  • 字段注入: Spring容器会直接设置bean中声明的字段,并为其赋予相应的属性值。

  • 构造函数注入: 如果使用构造函数注入,属性值会通过构造函数参数传递到bean实例中。

在属性注入阶段,Spring容器将已实例化的bean与所需的属性值进行关联。

此时,bean的实例已经包含了属性值,但还没有执行任何初始化方法。

3.初始化(Initialization)

在属性注入完成后,如果bean实现了InitializingBean接口或配置了初始化方法(通过init-method属性),Spring容器会调用这个方法。

在这个方法中,你可以执行一些自定义的初始化操作。

4.后置处理器的前置处理

在bean初始化之前,Spring容器会调用注册的所有后置处理器的postProcessBeforeInitialization方法,这允许开发者在bean初始化之前进行一些自定义的处理。

如下所示:

Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansEx
ception;

这个方法允许你在bean的初始化之前进行一些修改或增强操作。

5.初始化完成

初始化方法执行完成后,bean已经完全初始化,可以在应用程序中使用了。

6.后置处理器的后置处理

在bean初始化完成后,Spring容器会调用注册的所有后置处理器的postProcessAfterInitialization方法。

示例如下:

Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;

这个方法允许你在bean的初始化之后进行一些修改或增强操作,比如:

  • 为bean添加额外的功能,如日志记录、性能监控等;

  • 对bean进行代理,以实现AOP(面向切面编程);

  • 检查bean的状态或执行其他校验操作;


7.使用(Using)

初始化完成后,bean可以被应用程序中的其他组件使用。在这个阶段,bean执行它的正常业务逻辑。

8.销毁(Destruction)

当Spring容器关闭时,它会调用bean的销毁方法,这可以通过实现DisposableBean接口或配置销毁方法来实现。

在销毁方法中,可以执行一些清理操作,如释放资源、关闭连接等。

Bean的生命周期最后就变成下图了:


以上


最后送大家一个福利:

送我原创超30万字阿里架构师进阶专题合集


以及给大家整理最全大厂Java面试题及答案详解,包含:Java、多线程、JVM、Spring、MySQL、Redis、中间件...等必考题答案详解。


需要以上架构专题&面试答案的同学,加我微信即可领取!


添加时备注:资料






mikechen的架构笔记
十余年BAT架构经验倾囊相授!
 最新文章