(EJB3.0学习笔记二)Session Bean的生命周期

阅读更多
EJB容器创建和管理session bean实例,有些时候,你可能需要定制session bean的管理过程.例如,你可能想在创建session bean实例的时候初始化字段变量,或在bean实例被销毁的时候关掉外部资源.上述这些,你都可能通过在bean类中定义生命周期的回调方法来实现.这些方法将会被容器在生命周期的不同阶段调用(如:创建或销毁时).通过使有下面所列的注释,EJB 3.0允许你将任何方法指定为回调方法.这不同于EJB 2.1,EJB 2.1中,所有的回调方法必须实现,即使是空的.EJB 3.0中,bean可以有任意数量,任意名字的回调方法.
@PostConstruct:当bean对象完成实例化后,使用了这个注释的方法会被立即调用.这个注释同时适用于有状态和无状态的会话bean.
・@PreDestroy:使用这个注释的方法会在容器从它的对象池中销毁一个无用的或者过期的bean实例之前调用.这个注释同时适用于有状态和无状态的会话bean.
・@PrePassivate:当一个有状态的session bean实例空闲过长的时间,容器将会钝化(passivate)它,并把它的状态保存在缓存当中.使用这个注释的方法会在容器钝化bean实例之前调用.这个注释适用于有状态的会话bean.当钝化后,又经过一段时间该bean仍然没有被操作,容器将会把它从存储介质中删除.以后,任何针对该bean方法的调用容器都会抛出例外.
・@PostActivate:当客户端再次使用已经被钝化的有状态session bean时,新的实例被创建,状态被恢复.使用此注释的session bean会在bean的激活完成时调用.这个注释只适用于有状态的会话bean.
・@Init:这个注释指定了有状态session bean初始化的方法.它区别于@PostConstruct注释在于:多个@Init注释方法可以同时存在于有状态session bean 中,但每个bean实例只会有一个@Init注释的方法会被调用.这取决于bean是如何创建的(细节请看EJB 3.0规范)
.@PostConstruct在@Init之后被调用. 另一个有用的生命周期方法注释是@Remove,特别是对于有状态session bean.当应用通过存根对象调用使用了@Remove注释的方法时,容器就知道在该方法执行完毕后,要把bean实例从对象池中移走.

你可能感兴趣的:(Bean,EJB)