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至关重要。

相关推荐
Hanson Huang1 小时前
【Spring AI 1.0.0】Spring AI 1.0.0框架快速入门(2)——Prompt(提示词)
java·人工智能·spring·spring ai
.生产的驴2 小时前
SpringBoot 服务器监控 监控系统开销 获取服务器系统的信息用户信息 运行信息 保持稳定
服务器·spring boot·分布式·后端·spring·spring cloud·信息可视化
没有烦恼的猫猫3 小时前
有关Spring事务的传播机制
spring·事务
magic 2454 小时前
事务传播行为详解
spring
考虑考虑5 小时前
@MockitoBean注解使用
spring boot·后端·spring
Dkodak5 小时前
Could not initialize Logback logging from classpath:logback-spring.xml
xml·spring·logback
悟能不能悟5 小时前
Logback-spring.xml 配置屏蔽特定路径的日志
xml·java·spring
康小庄6 小时前
AQS独占模式——资源获取和释放源码分析
java·开发语言·jvm·spring boot·spring·spring cloud·nio
码不停蹄的玄黓7 小时前
通关JUC:Java并发工具包从入门到精通 | 深度源码解析
java·jvm·spring boot·spring·spring cloud
用户0595661192099 小时前
深入理解Spring Boot框架:从基础到实践
java·spring·编程语言