Spring
的
Bean
Bean
是
Spring
装配的组件模型,一切实体类都可以配置成一个
Bean
,进而就可以在任何其他的
Bean
中使用,一个
Bean
也可以不是指定的实体类,这就是抽象
Bean
。
在
Spring
中有两个最基本、最重要的包,即
org.springframework.beans
和
org.springframework.context
,在这两个包中,为了实现无侵入式的框架,代码中大量地使用了
Java
中的反射机制,通过动态调用来避免硬编码,为
Spring
反向控制提供了基础保证,在这两个包中,最重要的类时
BeanFactory
和
ApplicationContext
,
BeanFactory
提供一种先进的配置机制来管理任何种类的
Bean
,
ApplicationContext
是建立在
BeanFactory
之上的,并增加了其他功能,例如,国际化的支持、资源的访问和事件传播等。
Bean
的标识
(id
和
name)
Id
属性具有唯一性,每一个
Bean
只能有一个对应的
id,name
属性可以指定一个或者多个名称,各个名称之间用逗号或者分号隔开,第一个默认为标识名称,后面的多个自动成为这个
Bean
的别名。
Bean
的
class属性
在
Spring
配置文件中
class
属性指明
Bean
的来源,也就是
Bean
的实际路径,它指向一个实体类。
Bean
的作用域
在
Spring
中可以直接在配置文件中指定类的作用域,
scope
标识
Bean
的作用域。
在
Spring2.0
之前
Bean
只有两种作用域,即
Singleton(
单例
)
和
non-Singleton(
也称
prototype)
,
Spring2.0
以后,增加了
session
、
request
和
global session
三个专用于
Web
应用程序上下文的
Bean
。
singleton
作用域
当一个
Bean
的作用域设置为
Singleton
,那么
Spring IOC
容器中只存在一个共享的
Bean
实例,并且所有对
Bean
的请求,只要
id
与该
bean
定义相匹配,则只会返回
bean
的同一个实例。这个单一实例会被存储到单例缓存
(singleton cache)
中,并且所有针对该
bean
的后续请求和引用都将返回被缓存的对象实例。
prototype
prototype
的作用域部署的
Bean
,每一个请求都会产生一个新的
Bean
实例,相当于一个
new
的操作,对于
prototype
作用域的
bean
,有一点非常重要,那就是
Spring
不能对一个
prototype
的整个生命周期复杂,容器在初始化、配置、装饰或者是装配完一个
prototype
实例后,将它交给客户端,随后就对该
prototype
实例不负责了。
request
request
表示针对每一个
HTTP
请求都会产生一个新的
Bean
,同时该
Bean
仅在当前
HTTP Request
内有效。
session
session
作用域表示针对在一个
Http
请求都会产生一个新的
Bean
,同时该
Bean
仅在当前
Http session
范围内有效。
global session
global session
作用域类似于标准的
HTTP Session
作用域。
Bean
的生命周期
一个
Bean
从建立到销毁,会历经几个执行阶段,如果使用
BeanFactory
来生成、管理
Bean
,会尽量支持一下的生命周期。
Bean
的建立
由
BeanFactory
读取
Bean
的定义文件,并生成各个
Bean
的实例。
属性注入
执行相关的
Bean
属性依赖注入
BeanNameAware
的
setBeanName()
如果
Bean
类有实现
org.springframework.beans.factory.BeanNameAware
接口,则执行它的
setBeanName()
方法。
BeanFactoryAware
的
setBeanFactory()
如果
Bean
类实现
org.springframework.beans.factory.BeanFactoryAware
接口,则执行它的
setBeanFactory()
方法。
BeanPostProcessors
的
processBeforeInitialization()
如果有任何的
org.springframework.beans.factory.config.BeanPostProcessor
实例与
Bean
实例相关联,则执行
BeanPostProcessor
实例的
processBeforeInitialization()
。
InitializingBean
的
afterPropertiesSet()
如果
Bean
类有实现
org.springframework.beans.factory.InitializingBean
,则执行它的
afterPropertiesSet()
方法。
Bean
定义文件中定义
init-method
可以在
Bean
定义文件使用
”init-method”
属性设置方法名称。
BeanPostProcessors
的
processAfterInitialization()
如果有任何的
org.springframework.beans.factory.config.BeanPostProcessor
实例与
Bean
实例相关联,则执行
BeanPostProcessor
实例的
processAfterInitialization()
。
DisposableBean
的
destroy()
在容器关闭时,如果
Bean
类有实现
org.springframework.beans.factory.DisposableBean
接口,则执行它的
destroy()
方法。
Bean
定义文件中定义
destroy –method
在容器关闭时,可以在
Bean
定义文件使用
”
destroy –method
”
属性设置方法名称。
FactoryBean
Spring
中有两种类型的
Bean
,一种是普通的
Bean
,普通的
Bean
可以是用户定义的任何类;另一种是工厂
Bean
,即
FactoryBean
。工厂
Bean
与普通的
Bean
不同,其返回的对象不是指定类的一个实例,其返回的是该工厂
Bean
的
getObject
方法返回的对象。在
Spring
框架内部,
AOP
相关的功能及事务处理中,很多方法使用到工厂
Bean
。
BeanPostProcessor
在
Bean
的依赖关系由
Spring
容器建立并设置以后,你还有机会定义一些
Bean
的修正动作来修正相关的属性,方法是让
Bean
类实现
org.springframework.beans.factory.config.BeanPostProcessor
接口,该接口与
Spring
中的定义如下:
public interface BeanPostProcessor {
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}
postProcessBeforeInitialization
方法会在
Bean
类被初始化之前
(
例如
InitializingBean
的
afterPropertiesSet()
方法或者自定义的
init
方法
)
被执行,而
postProcessAfterInitialization()
方法会在
Bean
类被初始化之后立即被执行。
分享到:
相关推荐
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
2. **Bean的概念**: 在Spring中,一个Bean通常代表应用中的一个对象,这些对象由Spring容器创建、管理并提供给其他组件使用。Spring容器通过XML配置文件或注解来定义Bean及其相互关系。 3. **XML配置文件**: ...
SpringBean是Spring框架的核心概念之一,它是Spring IoC容器管理的对象。在普元EOS平台中,SpringBean同样扮演着重要角色,用于封装业务逻辑、数据访问等功能。通过合理地设计和配置SpringBean,可以极大地提高开发...
首先,我们要理解Spring Bean的概念。Spring Bean是Spring IoC容器管理的对象,这些对象的生命周期、依赖关系以及初始化行为由Spring容器控制。实例化Spring Bean的方式多种多样,包括XML配置、注解配置以及Java配置...
在Spring框架中,Bean生命周期是核心概念之一,它涉及到Bean的创建、初始化、使用和销毁等阶段。了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean...
在Spring中,核心概念之一就是Bean,它是一个简单的Java对象,由Spring IoC容器管理。Spring通过XML配置文件或注解来定义、配置和管理Beans。下面将深入探讨`<beans>`、`<bean>`及其属性,以及其他相关的配置元素。 ...
本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们了解Spring Bean的生命周期主要包含以下几个阶段: 1. **实例化**:Spring容器通过`Class`对象或`...
在Spring框架中,Bean是核心概念,它代表了应用程序中的对象。Spring通过IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)来管理这些Bean。在这个"Spring Bean简单应用实例"中,我们将...
在本文中,我们将深入探讨Spring中的Bean配置,包括IoC和DI的概念,Bean的配置方式,以及不同类型的IOC容器。 **Spring的Bean配置**: 在Spring中,Bean是应用中的对象,它们由Spring IoC容器负责创建、管理和装配...
在Spring框架中,Bean的实例化顺序是一个关键概念,它涉及到如何管理和协调多个Bean的创建与依赖关系。这里,我们主要探讨的是Spring如何通过其IoC(Inversion of Control)容器来实例化Bean,并理解其背后的逻辑。 ...
Spring Bean的初始化和销毁是Spring框架中一个非常重要的概念,它们都是Bean生命周期中不可或缺的一部分。在Spring框架中,我们可以使用多种方式来控制Bean的初始化和销毁,以下就Spring Bean的初始化和销毁进行详细...
Spring Bean的生命周期是Spring框架核心概念之一,它涵盖了Bean从创建到销毁的全过程。了解这一过程对于优化应用程序性能和管理对象状态至关重要。本篇将详细阐述Spring Bean生命周期的各个阶段,以及如何记忆和深入...
在Spring框架中,Bean的加载顺序是一个重要的概念,它涉及到Spring容器如何管理和初始化Bean的过程。在"spring的bean加载顺序样例项目"中,我们可以通过分析和实验来深入理解这一主题。下面将详细阐述Spring Bean的...
在本篇文章中,我们将深入探讨Spring的核心容器及其bean的概念,以帮助你更好地理解和使用这个强大的工具。 **Spring核心容器** Spring的核心容器是整个框架的基础,它负责创建、配置和管理bean。主要有两个关键...
在Spring1-1这个文件中,可能包含了关于这些概念的示例代码和详细教程,帮助开发者深入理解和掌握Spring中的Bean管理。学习和熟练运用这些知识,将对提升Java EE应用的开发效率和质量大有裨益。
Spring Bean 生命周期是 Spring 框架中的一个核心概念,了解 Spring Bean 的生命周期对我们了解整个 Spring 框架会有很大的帮助。本文将详细介绍 Spring Bean 生命周期的概念、生命周期图、生命周期阶段、生命周期...
在Java开发中,Spring框架是不可或缺的一部分,它提供了一个强大的依赖注入(DI)和面向切面编程(AOP)的容器。Spring的核心在于其...理解这些获取Bean的方法及其背后的概念,对于高效地使用Spring框架至关重要。
首先,理解Spring的核心概念——依赖注入(Dependency Injection,简称DI)。Spring通过DI管理bean,使得对象之间的依赖关系由Spring负责建立和维护,而非对象自身。这增强了代码的可测试性和可维护性。在非Spring...
本文将深入探讨Spring Bean的生命周期,并通过实际示例来演示如何运用这些概念。 首先,Spring Bean的生命周期可以分为几个阶段: 1. **初始化阶段**:在这个阶段,Spring会创建Bean的实例,这可以通过`@...