这是一篇转载,原文来自于 http://www.blogjava.net/huxiaowi/archive/2009/06/23/283775.html?opt=admin
作者是
Charleehu
在
spring
中,从
BeanFactory
或
ApplicationContext
取得的实例为
Singleton
,也就是预设为每一个
Bean
的别名只能维持一个实例,而不是每次都产生
一个新的对象
使用
Singleton
模式产生单一实例,对单线程的程序说并不会有什么问题,但对于多线程的程序,就必须注意安全
(Thread-safe)
的议题,防止多个线程
同时存取共享资源所引发的数据不同步问题。
然而在
spring
中
可以设定每次从
BeanFactory
或
ApplicationContext
指定别名并取得
Bean
时都产生一个新的实例:例如:
<bean id="helloBean"
class="onlyfun.caterpillar.HelloBean" singleton="false">
在
spring
中,
singleton
属性默认是
true
,只有设定为
false
,则每次指定别名取得的
Bean
时都会产生一个新的实例
一个
Bean
从创建到销毁,如果是用
BeanFactory
来生成
,
管理
Bean
的话,会经历几个执行阶段:
1
:
Bean
的建立:
有
BeanFactory
读取
Bean
定义文件,并生成各个
Bean
实例
2
:属性注入:
执行相关的
Bean
属性依赖注入
3
:
BeanNameAware
的
setBeanName()
:
如果
Bean
类有实现
org.springframework.beans.BeanNameAware
接口,则执行它的
setBeanName()
方法
4
:
BeanFactoryAware
的
setBeanFactory()
:
如果
Bean
类有实现
org.springframework.beans.factory.BeanFactoryAware
接口,则执行它的
setBeanFactory()
方法
5
:
BeanPostProcessors
的
ProcessBeforeInitialization()
如果任何的
org.springframework.beans.factory.config.BeanPostProcessors
实例与
Bean
实例相关。则执行
BeanPostProcessors
实例
的
processBeforeInitialization()
方法
6
:
initializingBean
的
afterPropertiesSet()
:
如果
Bean
类已实现
org.springframework.beans.factory.InitializingBean
接口,则执行他的
afterProPertiesSet()
方法
7
:
Bean
定义文件中定义
init-method
:
可以在
Bean
定义文件中使用
"init-method"
属性设定方法名称例如:
<bean
id="helloBean" calss="onlyfun.caterpillar.HelloBean"
init-method="initBean">
如果有以上设置的话,则执行到这个阶段,就会执行
initBean()
方法
8
:
BeanPostProcessors
的
ProcessaAfterInitialization()
如果有任何的
BeanPostProcessors
实例与
Bean
实例关联,则执行
BeanPostProcessors
实例的
ProcessaAfterInitialization()
方法
9
:
DisposableBean
的
destroy()
在容器关闭时,如果
Bean
类有实现
org.springframework.beans.factory.DisposableBean
接口,则执行他的
destroy()
方法
10
:
Bean
定义文件中定义
destroy-method
在容器关闭时,可以在
Bean
定义文件中使用
"destroy-method"
属性设定方法名称,例如:
<bean
id="helloBean" class="onlyfun.caterpillar.HelloBean"
destroy-method="destroyBean">
如果有以上设定的话,则进行至这个阶段时,就会执行
destroyBean()
方法,如果是使用
ApplicationContext
来生成并管理
Bean
的话则稍有不同,使用
ApplicationContext
来生成及管理
Bean
实例的话,在执行
BeanFactoryAware
的
setBeanFactory()
阶段后,若
Bean
类上有实现
org.springframework.context.ApplicationContextAware
接口,则执行其
setApplicationContext()
方法,接着才执行
BeanPostProcessors
的
ProcessBeforeInitialization()
及之后的流程
分享到:
相关推荐
base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz
- Spring 2.5引入了对JSR-250规范的支持,例如`@PostConstruct`和`@PreDestroy`注解,使得在bean生命周期管理中更加方便。此外,还增强了切面表达式语言(AspectJ)的支持,允许更精确地定义切点和通知。 3. **...
在Spring应用中,我们通常通过ApplicationContext来管理Bean的生命周期和依赖注入。下面我们将深入探讨Spring初始化、Bean的配置以及一些常用的Bean类型。 首先,Spring的初始化主要是通过ApplicationContext接口来...
### 智能工厂产品全生命周期追溯系统架构设计思路及应用场景方案 #### 一、引言 在当今工业4.0时代背景下,智能工厂成为推动制造业转型升级的关键力量。其中,**产品全生命周期追溯系统**是确保产品质量、优化生产...
- **DefaultAdvisorAutoProxyCreator**:继承自AbstractAutoProxyCreator,是Spring中默认的自动代理创建器。 4. AOP代理对象的来源和类型 - **TargetSource(目标源)**:被代理对象的来源。 - **...
Spring框架是Java开发中的核心组件,它以其模块化、松耦合的设计理念,极大地简化了企业级应用的构建。Spring3.0是该框架的一个重要版本,它引入了许多新特性和改进,为开发者提供了更强大的功能和更好的灵活性。在...
`atguigu_springboot2_zz-master`项目中,可以看到SpringBoot的起步依赖如`spring-boot-starter-web`、`spring-boot-starter-data-jpa`等,它们是预配置的Maven或Gradle模块,包含了开发特定功能所需的依赖,例如...
在本项目中,Spring负责管理bean的生命周期和装配,以及事务控制,使得业务逻辑和数据访问层得以解耦,降低了系统的复杂度。 3. **Mybatis**:Mybatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级...
在本案例中,"Spring源码出错,缺失cglib.3.2.6与objenesis.2.6"这一问题,揭示了Spring框架在运行时对两个重要库的依赖:CGLIB和Objenesis。 CGLIB(Code Generation Library)是一个高性能的代码生成库,主要用于...
SSM框架是Java Web开发中常用的一种组合,由Spring MVC、Spring和Mybatis三个组件构成,用于构建高效、灵活的Web应用。这个基于SSM的客户关系管理系统(CRM)毕业设计,利用了Maven进行项目构建,确保了依赖管理的便捷...
2. **配置Struts**:在Struts的配置文件中,将Action类设置为Spring管理的Bean,这样Struts在调用Action时会从Spring容器中获取实例。 3. **配置Hibernate**:配置Hibernate的SessionFactory,并在Spring配置文件中...
ZZ561401.CAB ZZ561401.CAB ZZ561401.CAB
标题中的"ZZ_MODIFIED_GEEBINF.ENS.zip"是一个压缩包文件,暗示其内容可能包含对EndNote引用样式的一种修改。EndNote是一款流行的参考文献管理软件,它允许用户存储、组织和格式化引用文献。"ZZ_MODIFIED_GEEBINF....
wincc SIMATIC WinCC是第一个使用最新的32位技术的过程监视系统,具有良好的开放性和灵活性。 从面市伊始,用户就对SIMATIC WinCC印象深刻。
在CAD中想要快速测量长度,在CAD工具栏找到加载应用程序,再点击加载 加载成功后在输入栏输入“zz”(不分大小写)在选择你需要测量的线段即可。
最重要的是,我们将来自胶子-胶子通道的胶子-融合ZZ + jet贡献添加到我们的合并样本中,胶子-胶子通道正式是N3LO,并在NLO上为胶子-融合机理提供了近似结果。 这些预测是使用VBFNLO软件包获得的,包括Z玻色子的轻子...
下面将详细阐述Spring Security的一些核心概念、功能以及如何在实际项目中应用。 1. **核心概念** - **Authentication(认证)**: 用户身份验证,确认用户是否为他们声称的人。Spring Security提供了多种认证机制...
Spring Framework作为Java领域中的一个里程碑,以其强大的功能和灵活的设计,成为Web开发领域的首选框架。4.0.4.RELEASE版本是Spring的重要里程碑,它带来了许多改进和优化,旨在提升开发效率,增强应用程序的稳定性...
标题中的“ZZ_MODIFIED_GEEBINF.ENS.zip”是一个压缩包文件,主要包含一个名为“ZZ_MODIFIED_GEEBINF.ENS”的文件。这个文件是一种特殊格式,用于定义EndNote的引用样式。EndNote是一款强大的文献管理软件,广泛应用...