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

相关推荐
探索java6 小时前
深入解析 Spring 获取 XML 验证模式的过程
xml·java·spring
Java水解13 小时前
Spring AI模块化RAG架构解析:三阶段设计与实现详解
后端·spring
Mr Aokey15 小时前
告别配置混乱!Spring Boot 中 Properties 与 YAML 的深度解析与最佳实践
java·spring·rpc
杨DaB17 小时前
【SpringMVC】MVC中Controller的配置 、RestFul的使用、页面重定向和转发
java·笔记·后端·学习·spring·mvc·restful
Code季风18 小时前
深入 Spring IoC 容器:六大关键应用场景助力项目开发
java·spring
小七mod18 小时前
【Spring】Spring Boot启动过程源码解析
java·spring boot·spring·面试·ssm·源码
是2的10次方啊18 小时前
Spring全家桶深度解析:从菜鸟到大神的进阶之路
spring boot·spring·spring cloud
愿你天黑有灯下雨有伞1 天前
Spring Boot SSE实战:SseEmitter实现多客户端事件广播与心跳保活
java·spring boot·spring
KNeeg_1 天前
Spring循环依赖以及三个级别缓存
java·spring·缓存
AI_Gump1 天前
【AI阅读】20250717阅读输入
java·spring boot·spring