在Spring中,从BeanFactory取得的实例为Singleton,预设是每一个别名维持一个实例,对单执行绪的程序来说并不会有什么问题,但对于多执行绪的程序,您必须注意到执行绪安全,您也可以设定每次从BeanFactory取得 Bean时,都产生一个新的实例,例如:
<bean id="helloBean" class="onlyfun.caterpillar.HelloBean" singleton="false">
singleton预设是true,藉由将其设定为false,每次取得Bean时都会产生一个新的实例。
BeanFactory 负责Bean的生命周期,包括Bean的生成与销毁、Bean的创建方式(是否为singleton)、Bean的属性设定、依赖关联的建立等。如果您要在Bean的生命周期的某个阶段作一些事情,可以有几个方式,第一个方式是实作Spring所提供的相关接口,透过实作 org.springframework.beans.factory.InitializingBean、 org.springframework.beans.factory.DisposableBean,您可以在Bean创建与销毁时作一些事情:
public interface InitializingBean {
void afterPropertiesSet() throws Exception;
}
public interface DisposableBean {
void destroy() throws Exception;
}
实作接口使得Spring的特定接口侵入Bean的实作中,这并不是个很好的作法,考虑到Bean的可移植性,您可以考虑统一Bean的初始化与销毁方法,并在Bean定义档中宣告在初始化或销毁Bean时使用这些方法:
<bean id="helloBean" class="onlyfun.caterpillar.HelloBean"
init-method="init"
destroy-method="destroy">
在实作Bean时,只要加入这些方法即可,例如:
public class HelloBean {
public void init() {
....
}
....
public void destroy() {
....
}
}
这样作的好处是可以不引入任何Spring特定的接口,使得Bean可以轻易的从Spring框架中脱离,只要您所采用的另一个框架可以支持您所自订的初始化与销毁方法,Bean就不用任何的修改,然而这个方法事实上还是依赖于容器,容器必须有呼叫这些方法的能力,只是 这些方法的名称可以由我们自行决定,而不用实现特定的接口。
除了上面两种方式,您还可以在Bean的建构函式或setter中作一些类似的初始化动作,这可以使得Bean不依赖于特定接口或容器功能,然而销毁时的动作就比较麻烦,因为finalize()执行的时间是由GC决定的,您只能在当中放一些不是实时性需求的销毁相关动作。
分享到:
相关推荐
一旦XML配置加载到Spring容器中,容器将根据配置创建Bean实例,并按照定义进行初始化、依赖注入,最后完成Bean的生命周期管理。 10. **实践操作**: 在实际开发中,我们可以使用Eclipse的Spring插件来简化Bean...
Bean的作用域定义了Bean的生命周期以及Spring容器如何管理这些Bean的实例。Spring提供了多种作用域: 1. **Singleton**:单例模式,是Spring默认的作用域。在整个应用期间,Spring IoC容器只会为每个Bean定义创建一...
Session Bean的生命周期包括实例化、激活、被动使用(调用方法)、钝化(不再被调用)和销毁。在录像中,会讲解如何控制这些阶段,以及它们对性能和资源管理的影响。 5. **事务管理**: EJB提供了自动事务管理,...
依赖注入是Spring的核心特性,它允许我们通过容器来管理对象的生命周期和对象之间的关系,而不是在代码中硬编码这些依赖关系。这使得我们的代码更加灵活,易于测试和维护。 创建Spring项目的第一步通常是配置Spring...
这种方式允许开发者使用Spring框架来管理POJO的生命周期,从而使得业务逻辑更加灵活和易于维护。 总的来说,JBI开发指南(ServiceMix开发指南)是一份珍贵的资源,为开发者提供了一条学习JBI和ServiceMix的入门之路...
通过定义DAO(Data Access Object)接口和实现,可以设计查询方法,Spring容器会自动管理这些DAO的生命周期,使得在业务逻辑层可以直接调用查询方法。 修改客户信息:更新操作与新增类似,获取需要修改的Customer ...
- **Bean**:Bean是Spring框架中的基本组成部分,通常指代一个具有生命周期、作用域以及依赖关系的对象。 - **Bean的生命周期**:从创建到销毁的过程,包括初始化和销毁两个阶段。 - **Bean的作用域**:Spring支持...
- **Bean的生命周期**:Spring管理的Bean有完整的生命周期,包括初始化、使用和销毁,可以自定义生命周期回调方法。 总结,Spring框架通过IOC和DI实现了对象的解耦和灵活管理,提供了AOP进行横切关注点的处理,...
EJB容器是Java EE服务器的一部分,它负责管理Bean的生命周期、事务、安全性、并发性和资源分配。开发者只需编写Bean的业务逻辑,其余的由容器自动处理。 **3. 开发EJB应用** 本示例可能包含两个主要部分: - `...
这样,服务提供者和消费者都可以作为Spring的bean进行管理,使得服务的生命周期与Spring应用上下文同步。 1. 服务提供者配置: 在服务端,我们需要配置一个HessianExporter,将服务bean与URL绑定,这样...
Spring作为一个依赖注入(DI)和面向切面编程(AOP)的容器,它管理Bean的生命周期并处理Bean之间的依赖关系。本文将深入探讨Spring Bean的继承与自动装配。 首先,让我们了解Bean的基本定义。在Spring配置文件中,...
Spring Ioc Spring所依赖的两个核心理念:控制反转(Ioc)、面向切面编程(AOP) 初学者可能不理解什么叫控制反转,那么我们来进一步描述一下Ioc...Spring把需要管理的对象叫做Spring Bean(简称Bean),管理这些Bean的容
- **Bean的生命周期:** - **Bean的定义:** Bean的基本配置信息。 - **Bean的初始化:** 定义Bean初始化的方法。 - **Bean的使用:** Bean在应用中的具体用途。 - **Bean的销毁:** 定义Bean销毁的方法。 - *...
JSF 的生命周期包括了多个阶段,例如恢复视图、应用请求值、处理验证、更新模型值、调用应用等。 ##### 7.2 简单实例 创建自定义组件通常涉及到编码、渲染以及与用户界面的交互。下面是一个简单的自定义组件示例:...
- 回调方法:容器在Bean生命周期的关键事件上调用Bean的方法,例如在合用、持久化、结束事务等操作前后。 - EJBContext接口:Bean通过EJBContext获取关于容器的信息,如客户身份、事务状态,或获取自身引用。 - Java...
无论是有状态还是无状态会话Bean,它们都有自己的生命周期,包括创建、初始化、活跃、钝化和销毁几个阶段。容器负责管理这些阶段,确保Bean在正确的时间被创建和销毁,从而优化资源使用。 **会话Bean的最佳实践** ...
- 本章节详细介绍了如何利用J2EE技术栈构建一个企业级的在线综合信息管理系统,从需求分析到系统设计,再到具体实现和后期运维,涵盖了整个项目生命周期的关键环节。 #### 第五章 员工登录系统 **5.1 系统分析和...
SPRING BEAN的销毁 项目文件(ECLIPSE)。 之前各种测试,一直有问题。后来明白,容器啊!...容器灰常重要,使用容器促使BEAN的生命周期。 想了两天,这个问题,SPRING从入门到精通这本书真没处理好!