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
类被初始化之后立即被执行。
分享到:
相关推荐
从基础概念如Spring IoC容器和Spring Bean的定义,到高级主题如依赖注入和AOP的实现,以及Web开发方面的Spring MVC框架和表单数据处理等内容都有涉及。此外,还包括了Spring事务管理和Spring Boot框架的介绍,帮助...
2. Spring俩大核心概念 IOC,Inversion of Control,控制反转 AOP(Aspect-OrientedProgramming),面向切面编程 Spring AOP里面常用名词的概念: Spring容器的启动流程 Spring Bean的生命周期? Spring中bean的作用域...
Spring Bean封装机制 Bean Wrapper Bean Factory ApplicationContext Web Context Spring 高级特性 Web 应用与 MVC Spring MVC Spring MVC指南 基于模板的Web表示层技术 Web 应用中模板技术与 JSP 技术的...
Spring核心概念 IOC(Inversion of Control)控制反转 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。 也就是说,我们把需要新建的对象...
这是使用 Spring AOP 在方法级别显示版本控制功能的简单概念证明。如何? 在任何 spring bean 中,您都可以在方法级别添加 @Versioned(feature, version) 注释。 并在任何 spring 属性中提供功能版本。 运行时将仅...
03_编码剖析Spring管理Bean的原理 04_Spring的三种实例化Bean的方式 05_配置Spring管理的bean的作用域 06_Spring管理的Bean的生命周期 07_编码剖析Spring依赖注入的原理 08_编码剖析Spring装配基本属性的原理 ...
这篇文章总结了77道Spring面试题及答案,涵盖...6. AOP部分对面向切面的核心概念如通知、连接点、切点等进行了解释,并介绍了Spring AOP的实现原理。 总的来说,这篇文章内容丰富全面,适合作为Spring面试的重要参考资料,
2.5 使用Spring IDE的Bean-supporting特性 2.5.1 问题描述 2.5.2 解决方案 2.5.3 实现方法 2.6 小结 第3章 Spring中的Bean配置 3.1 在Spring IoC容器里配置Bean 3.1.1...
本文深入探讨了Spring IoC容器的加载过程及其源码实现,揭示了Spring中最为根本的概念之一。这包括从AnnotationConfigApplicationContext的实例化开始,到DefaultListableBeanFactory工厂的建立,再到...
2.5 使用Spring IDE的Bean-supporting特性 2.5.1 问题描述 2.5.2 解决方案 2.5.3 实现方法 2.6 小结 第3章 Spring中的Bean配置 3.1 在Spring IoC容器里配置Bean 3.1.1...
2.5 使用Spring IDE的Bean-supporting特性 2.5.1 问题描述 2.5.2 解决方案 2.5.3 实现方法 2.6 小结 第3章 Spring中的Bean配置 3.1 在Spring IoC容器里配置Bean 3.1.1 问题...
Spring有两个核心接口:BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。...在Spring中,Bean的是一个非常广义的概念,任何的Java对象、Java组件都被当成Bean处理。
第一天内容:Spring框架简介(EJB、JMX、Spring核心功能、Spring模块详解、Spring重要概念(容器)、Spring容器初始化的整个流程、Spring后处理器),IOC详解,Spring环境搭建,Spring创建Bean的三种方式,scope属性...
这里主要介绍Spring的基本概念,并详细介绍其中以“bean工厂”为核心的轻量级控制反转(IoC)容器。 Spring让开发者更轻松的实现轻量级、可扩展的J2EE架构。对于我们推荐的架构模块,让Spring提供了即时可用的实现...
详细介绍了Spring Boot最常用的30个注解,包含概念、原理、示例 Spring Boot最常用的30个注解 一、 @SpringBootApplication 二、 Spring Bean 相关 1 @Controller 2 @Service 3 @Repository 4 @Component 5 @Bean 6 ...
2. Spring 2.0 的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 更简单的XML配置 2.2.2. 新的bean作用域 2.2.3. 可扩展的XML编写 2.3. 面向切面编程(AOP) 2.3.1. 更加简单的AOP XML配置 2.3.2. 对@AspectJ 切面的...
SpringAOP概念拓展: 73 之前实现了目标方法的动态调用,现在来实现切面的动态调用。 74 4.2.2 AOP实现的两种模式 78 4.2.2.1 xml形式 78 XML形式拓展: 81 异常通知处理例子: 91 不用spring异常通知,另一种处理...