Ejb in action(五)——会话Bean的生命周期

会话Bean与消息驱动Bean、实体Bean的最重要的区别在于生命周期的差异性。会话Bean实例存活期较短,它和线程类似,包括对象的创建、初始化、运行、钝化、激活、销毁。

生命周期的概念,了解生物学的童鞋一定对这个概念不陌生。这里所谓的生命周期,就是指EjbBean实例存在的各个阶段中,提供的一些注解方法。在运行时,Ejb容器会动态调用这些方法。

关于会话Bean的生命周期,Ejb3.0中一共提供了6个注解方法,这些方法都适合有状态会话Bean,而只有@postConstruct和@PreDestroy使用与无状态会话Bean。了解了各个注意的意思之后,就明白为什么了。

无论有状态会话Bean还是无状态会话Bean,它们都存在实例对象的创建于销毁,所以都会有这两个注解@postConstruct和@PreDestroy。而对于比较复杂的无状态会话Bean来说,为了更好的操作它,我们才会加入其它的几种注解,如钝化、激活、初始化、移除。

测试:

我们可以在上一节,购物车实例的服务器端实现StatefulSessionBeanImpl中,加入如下方法测试代码:

//初始化
	@Init
	public void init(){
		System.out.println("the init() method was invoked");
	}
	//bean类完成实例化之后调用
	@PostConstruct
	public void postConstruct(){
		System.out.println("the postConstruct() method was invoked");
	}

	//在结束对Remove方法调用之后,销毁Bean实例之前调用
	@PreDestroy
	public void preDestroy(){
		System.out.println("the preDestroy() method was invoked");
	}

	//1、有状态会话Bean实例空闲过长时间,容器将敦化它(passivate)它
	//2、在容器敦化Bean实例之前调用
	@PrePassivate
	public void prePassivate(){
		System.out.println("the prePassivate() method was invoked");
	}

	//1、有状态会话Bean实例空闲过长时间,容器将钝化(passivate)它
	//2、客户端再次使用钝化的会话Bean,Bean的激活完成时调用
	@PostActivate
	public void postActivate(){
		System.out.println("the postActivate() method was invoked");
	}

	//在移出池之前调用
	@Remove
	public void remove(){
		System.out.println("the remove() method was invoked");
	}

执行结果:

客户端访问时,服务器端执行1步骤的两个方法;

等待一段时间,由于有状态会话Bean实例一直没有被调用,容器会自动执行2方法,将其钝化;

在步骤3,客户端再次调用,将钝化的Bean激活。

Ejb容器,会根据不同的阶段,选择性自动执行对应的方法。

Ejb in action(五)——会话Bean的生命周期,布布扣,bubuko.com

时间: 2024-07-28 13:41:02

Ejb in action(五)——会话Bean的生命周期的相关文章

EJB学习笔记五(SessionBean的生命周期)

1.前言 前几篇主要介绍了有状态和无状态.远程和本地调用的SessionBean,这篇介绍一下有关SessionBean的生命周期.SessionBean处于EJB容器管理之下,对于客户端来说是完全透明的.但对于开发者来说,必须要了解SessionBean在EJB容器中的运行规律. 2.为何会有SessionBean的生命周期 EJB容器创建和管理SessionBean实例,有些时候,可能也需要定制SessionBean的管理过程.例如,我想在创建SessionBean实例的时候初始化字段变量,

持久化API(JPA)系列(五)控制实体Bean的生命周期

上篇文章<持久化API(JPA)系列(四)管理器EntityManager--执行数据库更新>中我们讲解了使用实体管理器的各种函数操作数据库的方法. 本文主要讲:控制实体Bean的生命周期. 与会话Bean类似,实体Bean也有自己的生命周期,分别对应不同的状态. 下面我们首先来讲解实体Bean的状态和生命周期事件: 1.实体Bean生命周期的4种状态 2.实体Bean的事件: @PostLoad @PrePersist和@PostPersist @PreUpdate和@PostUpdate

无状态会话bean(2)----声明周期回调(未排版)

与用于应用程序代码的常规Java类不同,服务器管理无状态会话bean的声明周期它在两个方面影响了一个bean的实现. 首先,服务器决定了创建和删除bean实例的时间.应用程序不会控制何时或者甚至创建多少特定的无状态会话bean实例,或者它们将存活多久. 第二,服务器必须在构建之后,但是在调用bean的业务逻辑之前,初始化bean服务.同样,该bean可能必须在使用业务方法之前获得可用的资源,如JDBC数据源.然而,为了使得bean获取资源,服务器必须首先完成初始化bean服务.这限制了类的构造函

Spring容器中Bean的生命周期

日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也有属于它的生命周期. 人类大脑对图像的认知能力永远高于文字,因此,闲言少叙,书归正传,上图先: 步骤很多,切莫惊慌,我们可以把上面的步骤归纳如下: 1-2:创建实例: 现在假设spring就是个容器,而配置文件中配置的bean属性才是我们真正需要的东西.创建实例就是说,我把配置文件中的bean信息取出来化作一个真正的bean并放到容器中. 3-4:注入依赖关系:

Spring中Bean的生命周期方法

Bean的生命周期方法 src\dayday\Car.java package dayday; import com.sun.org.apache.xpath.internal.SourceTree; import javax.sound.midi.Soundbank; /** * Created by I am master on 2016/11/28. */public class Car { private String name; public void setName(String n

《Spring揭秘》(八)---- IoC容器及Bean的生命周期

Spring的IoC容器会以某种方式加载配置信息,然后根据这些信息绑定整个系统的对象,最终组装成一个可用的基于轻量级容器的应用系统.实现以上功能,分为两个阶段:容器启动阶段和Bean实例化阶段.而且Spring的IoC容器在每个阶段都加入了相应的扩展点,以便根据具体场景的需要加入自定义的扩展逻辑. 1 容器启动阶段 首先会通过某种途径加载配置信息,大部分情况下,容器需要依赖某些工具类(BeanDefinitionReader)对加载的配置信息进行解析和分析,并将分析后的信息编组为相应的BeanD

Spring中Bean的生命周期Scope

在一个bean的配置里面可以指定一个属性Scope,也就是bean的范围,bean的生命周期. Scope可取的值5种:singleton(默认).prototype.request.session.global session 其中最常用的就是:singleton和prototype,其他的三个是和web相关的,很少使用. singleton:也就是单例模式.表示这个bean是单例模式,每次获取都是同一个bean prototype:多例模式,也就是每次获取的都是一个新对象,使用场景:在act

第37讲 谈谈Spring Bean的生命周期和作用域

在企业应用软件开发中,Java 是毫无争议的主流语言,开放的 Java EE 规范和强大的开源框架功不可没,其中 Spring 毫无疑问已经成为企业软件开发的事实标准之一.今天这一讲,我将补充 Spring 相关的典型面试问题,并谈谈其部分设计细节.今天我要问你的问题是,谈谈 Spring Bean 的生命周期和作用域?典型回答Spring Bean 生命周期比较复杂,可以分为创建和销毁两个过程.首先,创建 Bean 会经过一系列的步骤,主要包括:实例化 Bean 对象.设置 Bean 属性.如

Spring4学习回顾之路06- IOC容器中Bean的生命周期方法

SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行特定的任务! Spring IOC容器对Bean的生命周期进行管理的过程: -通过构造器或者工厂方法创建Bean实例 -为Bean的属性设置值和对其他Bean的引用 -调用Bean的初始化方法 -Bean可以使用了 -当容器关闭了,调用Bean的销毁方法 在Bean的声明中设置init-method和destory-method属性,为Bean指定初始化和销毁方法:如图: <bean id="s