Spring生命周期

在Spring框架中,Bean的生命周期指的是从Bean的创建到销毁的整个过程。这个过程包括了多个阶段,每个阶段都有特定的操作。下面是一个典型的Spring Bean生命周期的概述:

一. 实例化(Instantiation)

当Spring容器启动时,它会根据配置文件或注解创建Bean实例。

二. 属性赋值(Populate Properties)

Spring会通过setter方法或其他注入方式(如构造器注入)将依赖注入到Bean的属性中。

三. 属性赋值(Populate Properties)

3.1 设置Bean名称和Bean引用(Set Bean Name and Bean Reference)

Spring会调用setBeanName()方法设置Bean的名称,并调用setBeanFactory()方法设置BeanFactory的引用(如果有的话)。

3.2 调用BeanNameAware接口的方法

如果Bean实现了BeanNameAware接口,Spring会调用它的setBeanName()方法,传递Bean的名称。

3.3 调用BeanClassLoaderAware接口的方法

如果Bean实现了BeanClassLoaderAware接口,Spring会调用它的setBeanClassLoader()方法,传递类加载器的引用。

3.4 调用BeanFactoryAware接口的方法

如果Bean实现了BeanFactoryAware接口,Spring会调用它的setBeanFactory()方法,传递BeanFactory的引用。

3.5 调用EnvironmentAware接口的方法

如果Bean实现了EnvironmentAware接口,Spring会调用它的setEnvironment()方法,传递Environment对象的引用。

3.6 调用ApplicationContextAware接口的方法

如果Bean实现了ApplicationContextAware接口,Spring会调用它的setApplicationContext()方法,传递ApplicationContext对象的引用。

3.7 调用MessageSourceAware接口的方法

如果Bean实现了MessageSourceAware接口,Spring会调用它的setMessageSource()方法,传递MessageSource对象的引用。

3.8 调用ApplicationEventPublisherAware接口的方法

如果Bean实现了ApplicationEventPublisherAware接口,Spring会调用它的setApplicationEventPublisher()方法,传递ApplicationEventPublisher对象的引用。

四. 调用自定义的初始化方法

4.1 调用InitializingBean接口的afterPropertiesSet()方法

如果Bean实现了InitializingBean接口,Spring会调用它的afterPropertiesSet()方法。此外,还可以通过@PostConstruct注解标注一个无参数的方法,该方法将在依赖注入完成后被自动调用。

4.2. 调用自定义的初始化方法(XML配置或注解)

通过在XML配置文件中使用<bean>标签的init-method属性,或者使用@Bean注解的initMethod属性,可以指定一个初始化方法。

五. 使用阶段(Ready to Use)

此时,Bean已经完全初始化并可以使用了。

六. 销毁(Destruction)

6.1 Bean实现了DisposableBean接口,Spring会调用它的destroy()方法

当容器关闭时,会触发Bean的销毁过程。如果Bean实现了DisposableBean接口,Spring会调用它的destroy()方法。此外,还可以通过@PreDestroy注解标注一个无参数的方法,该方法将在容器销毁Bean之前被自动调用。

6.2 自定义销毁方法(XML配置或注解)

通过在XML配置文件中使用<bean>标签的destroy-method属性,或者使用@Bean注解的destroyMethod属性,可以指定一个销毁方法。

这个过程确保了Spring管理的Bean在生命周期中的每个阶段都能得到正确的处理和配置。理解这些步骤对于正确管理和使用Spring Bean至关重要。

相关推荐
北漂老男孩4 小时前
Spring 框架核心机制深度解析【AI模型互搏生成】
java·后端·spring
blammmp5 小时前
Spring Cloud:Gateway(统一服务入口)
spring·spring cloud·gateway
攒了一袋星辰6 小时前
Spring是如何实现scope作用域支持
java·后端·spring
小黑屋说YYDS6 小时前
Spring Validation校验
java·后端·spring
带刺的坐椅8 小时前
100% 自主可控,Java Solon v3.3.1 发布(国产优秀应用开发基座)
java·spring·ai·信创·solon·mcp
JAVA学习通10 小时前
[SpringBoot]Spring MVC(6.0)----图书管理系统(初)
spring boot·后端·spring
JAVA学习通12 小时前
[SpringBoot]Spring MVC(5.0)----留言板
spring boot·spring·mvc
.生产的驴13 小时前
SpringBoot 商城系统高并发引起的库存超卖库存问题 乐观锁 悲观锁 抢购 商品秒杀 高并发
android·java·数据库·spring boot·后端·spring·maven
沛沛老爹1 天前
软件架构风格系列(6):解释器架构
spring·架构风格·架构入门·解释器架构
沛沛老爹1 天前
软件架构风格系列(7):闭环控制架构
spring·工业4.0·温度控制·架构风格·架构入门·闭环控制架构