Spring Bean 生命周期
任何一个事物都有自己的生命周期,生命的开始、生命中、生命结束。大家最熟悉的应该是servlet
的生命周期吧。和
servlet
一样
spring bean
也有自己的生命周期。本文我就向大家讲述
spring bean
的生命周期,这个对理解
spring
框架有非常好的作用。
大家应该知道spring
中有几种供
springbean
生存的容器:
BeanFactory
、
ApplicationContext
、
webApplicationContext
。由于
ApplicationContext
和
webApplicationContext
基本一样。所有这里就只介绍
BeanFactory
和
ApplicationContext
。
理解springBean
的生命周期主要通过两个层面来理解。其一是
Bean
的作用范围,其一是实例化
Bean
时所经历的一系列阶段。
一、
BeanFactory
下图描述了BeanFactory
中
bean
生命周期的完整过程
1.
当调用者通过
getBean(
name
)向
容器寻找Bean
时,如果容器注册了
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor接口,在实例
bean
之前,将调用该接口的
postProcessBeforeInstantiation
()方法,
2.
根据配置情况调用
Bean构造函数或工厂方法实例化
bean
3.
如果容器注册了
org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor接口,在实例
bean
之后,调用该接口的
postProcessAfterInstantiation
()方法,可以在这里对已经实例化的对象进行一些装饰。
4.
受用依赖注入,Spring
按照
Bean
定义信息配置
Bean
的所有属性
,在设置每个属性之前将调用
InstantiationAwareBeanPostProcess接口的
postProcessPropertyValues
()方法
。
5
.如果
Bean
实现了
BeanNameAware
接口,工厂调用
Bean
的
setBeanName()
方法传递
Bean
的
ID
。
6
.如果
Bean
实现了
BeanFactoryAware
接口,工厂调用
setBeanFactory()
方法传入工厂自身。
7
.如果
BeanPostProcessor
和
Bean
关联,那么
将调用该接口
的postProcessBeforeInitialzation()
方法
对
bean进行加工操作,这个非常重要,
spring
的
AOP
就是用它实现的。
8.
如果bean
实现了
InitializingBean
接口,将调用
afterPropertiesSet
()方法
9
如果Bean
指定了
init-method
方法,它将被调用。
10
如果有BeanPsotProcessor
和
Bean
关联,那么它们的
postProcessAfterInitialization()
方法将被调用。 到这个时候,
Bean
已经可以被应用系统使用了
。
11.
如果在<bean>
中指定了该
bean
的作用范围为
scope="prototype",
将
bean
的调用者,调用者管理该
bean
的生命周期,
spring
不在管理该
bean
。
12.
如果在<bean>
中指定了该
bean
的作用范围为
scope="singleton",
则将该
bean
放入
springIOC
的缓存池中,将触发
spring
对该
bean
的生命周期管理。
13.
有两种方法可以把它从Bean Factory
中删除掉
:
1.如果
Bean
实现了
DisposableBean
接口,
destory()
方法被调用。
2.如果指定了订制的销毁方法,就调用这个方法。
总结:
Bean的完整生命周期从
spring
容器开始实例化
bean
开始,到销毁。可以从三点来理解
1、
bean自身的方法:包括构造方法、
set
方法、
init-method
指定的方法、
destroy-method
指定的方法
2、
Bean级生命周期接口方法:如
BeanNameAware
、
BeanFactoryAware
等这些接口方法由
bean类实现。
3、
容器级生命周期接口方法:上图中带星的。有InstantiationAwareBeanPostProcessor
、
BeanPostProcessor
等。一般称为后处理
器。他们一般不由bean
本身实现,独立存在,注册到
spring
容器中。
Spring
通过接口反射预先知道,当
spring
容器创建任何
bean
时,这些后处理器都会发生作用。所以他们是全局的,用户可以通过编码对只感兴趣的
bean
进行处理。
Bean级生命周期接口和容器级生命周期接口是个性和共性辩证统一的思想,前者解决
bean
的个性化处理问题,而后者解决容器中某些
bean
共性化处理问题。
二、
ApplicationContext
下图描述了ApplicationContext
的生命周期
通过上图很容易发现其实应该上下文和BeanFactory
只是多了一个接口,
如果Bean
实现了
ApplicationContextAwre
接口,
setApplicationContext()
方法被调用。
还有如果配置文件中生明了工厂后处理器接口
BeanFactoryPostProcessor的实现类,则应用上下文在装配配置文件之后初始化
bean
之前将调用该接口对配置信息进行加工。
还有应该上下文的这些后处理器只要和普通的bean
一样配置在
spring
配置文件中就行了,不需要事先声明。
三、
总结
Spring为
bean
提供了细致周全的生命周期过程,通过实现特定的接口或通过《
bean
》属性设置,都可以对
bean
的生命周期过程施加影响。我们可以随意的配置
bean
的属性,使用非常灵活。但笔者在这里建议大家不要过多的使用
bean
实现接口,因为这样会使你的代码和
spring
聚合比较紧密。可以考虑使用后处理
bean
,来实现一些特殊的功能,并且非常的方便。
- 大小: 57.5 KB
- 大小: 66.5 KB
分享到:
相关推荐
接下来,我们将深入探讨Spring Bean生命周期的各个阶段,并通过具体的示例来演示。 1. **配置阶段** 在Spring容器初始化时,它会读取配置文件(如XML或Java配置),解析Bean定义,包括其依赖关系、初始化方法、...
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
其中,Spring Bean生命周期的管理是Spring框架的核心功能之一,它涉及Spring容器如何创建、配置以及销毁Bean的整个过程。理解Spring Bean的生命周期对于开发高效和可维护的Java应用至关重要。 Spring Bean生命周期...
Spring Bean 生命周期是 Spring 框架中的一个核心概念,了解 Spring Bean 的生命周期对我们了解整个 Spring 框架会有很大的帮助。本文将详细介绍 Spring Bean 生命周期的概念、生命周期图、生命周期阶段、生命周期...
Spring框架是Java应用开发中的一个核心组件,尤其在企业级应用中广泛使用。Spring通过其IoC(Inversion of Control,控制反转)容器管理Bean的生命周期,...理解Bean生命周期对于有效管理和优化Spring应用至关重要。
本篇将详细阐述Spring Bean生命周期的各个阶段,以及如何记忆和深入理解这一过程。 首先,Spring Bean的生命周期可以分为两个主要阶段:容器初始化阶段和容器销毁阶段。 在容器初始化阶段,Spring Bean会经历以下...
在Spring框架中,Spring Bean的生命周期始于其创建过程,即"我从哪里来?"的问题。首先,要明确几个核心概念:Java Bean、Spring Bean和Spring IoC(控制反转)容器。Java Bean是一种遵循特定规范的Java类,而Spring...
下面以一个简单的Person类为例,展示Spring Bean生命周期的各个阶段: ```java public class Person implements BeanFactoryAware, BeanNameAware, InitializingBean, DisposableBean { // 省略属性和构造器 @...
在Spring框架中,Bean生命周期是核心概念之一,它涉及到Bean的创建、初始化、使用和销毁等阶段。了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean...
在Spring框架中,在IOC容器中管理的Bean分为单例和原型两种,单例Bean在容器启动时就实例化,原型Bean则是每次从容器中请求时才会实例化。
SpringBean的生命周期.mdj
本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们了解Spring Bean的生命周期主要包含以下几个阶段: 1. **实例化**:Spring容器通过`Class`对象或`...
Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...
在Spring框架中,Bean的生命周期管理和ApplicationContext的应用是两个核心概念,它们对于理解Spring如何管理和协调应用中的对象至关重要。本文将深入探讨这两个主题,并结合国际化(i18n)和事件传递来阐述它们在...
在Spring框架中,Bean的生命周期管理是其核心功能之一,它允许开发者控制Bean从创建到销毁的整个过程。本文将详细解析Spring Bean的生命周期配置过程。 首先,Bean的生命周期始于实例化。当Spring容器...
Bean生命周期的理解对于优化应用性能和理解Spring内部工作原理至关重要。这里我们将深入探讨Spring的Bean生命周期、容器周期以及工厂周期。 首先,让我们从Bean生命周期开始。在Spring中,Bean的生命周期包括以下几...
这两个后处理器接口提供了灵活的扩展点,允许开发者在Bean生命周期的关键点进行自定义操作。 ApplicationContext是BeanFactory的升级版,提供了更丰富的功能,包括事件发布、国际化等。在ApplicationContext中,...