与用于应用程序代码的常规Java类不同,服务器管理无状态会话bean的声明周期它在两个方面影响了一个bean的实现。
首先,服务器决定了创建和删除bean实例的时间。应用程序不会控制何时或者甚至创建多少特定的无状态会话bean实例,或者它们将存活多久。
第二,服务器必须在构建之后,但是在调用bean的业务逻辑之前,初始化bean服务。同样,该bean可能必须在使用业务方法之前获得可用的资源,如JDBC数据源。然而,为了使得bean获取资源,服务器必须首先完成初始化bean服务。这限制了类的构造函数的用处,因为直到服务器完成初始化后,bean才可以访问资源。
为了允许服务器和bean实现它们的初始化要求,EJB支持生命周期的回调方法,可以由服务器在bean生命周期的不同点调用。对于无状态会话bean,有两个生命周期回调:PostConstruct和PreDestroy。一旦服务器已为bean完成了初始化所有的容器的服务,它将会调用PostConstruct回调。实际上,它将替换构造函数成为初始化逻辑的位置所在,因为只有在这里才能保证容器服务是可用的。在服务器释放bean实例到垃圾回收之前,立即调用PreDestroy回调。在PreDestroy中释放由需要显示关闭的PostConstruct所获得的任何资源
下面的代码显示了一个无状态会话bean,它在PostConstruct回调中获取了一个logger的实例的引用。Bean之多有一个PostCons回调方法,由@PostConstruct标记注解所标识。同样,由@PreDestroy注解标识PreDestroy回调
(代码)