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

相关推荐
我命由我123456 分钟前
Spring Boot - Spring Boot 静态资源延迟响应(使用拦截器、使用过滤器、使用 ResourceResolver)
java·spring boot·后端·spring·java-ee·intellij-idea·intellij idea
迦蓝叶5 小时前
JAiRouter v1.0.0 正式发布:企业级 AI 服务网关的开源解决方案
java·运维·人工智能·网关·spring·ai·开源
一叶飘零_sweeeet7 小时前
深入 Spring 内核:解密 15 种设计模式的实战应用与底层实现
java·spring·设计模式
洛克大航海7 小时前
3-SpringCloud-LoadBalancer-OpenFeign服务调用与负载均衡
spring·spring cloud·负载均衡·openfeign·loadbalancer
FreeBuf_7 小时前
Spring两大漏洞可导致泄露敏感信息及安全防护绕过(CVE-2025-41253/41254)
java·安全·spring
RainbowSea8 小时前
11. Spring AI + ELT
java·spring·ai编程
RainbowSea8 小时前
12. 模型RAG评测
java·spring·ai编程
JAVA学习通9 小时前
Spring AI 核心概念
java·人工智能·spring·springai
老K的Java兵器库9 小时前
并发集合踩坑现场:ConcurrentHashMap size() 阻塞、HashSet 并发 add 丢数据、Queue 伪共享
java·后端·spring
RoboWizard19 小时前
扩容刚需 金士顿新款Canvas Plus存储卡
java·spring·缓存·电脑·金士顿