无状态会话 Bean 与 Singleton 会话 Bean
为了提高性能,您可以选择无状态会话 Bean,如果它具有以下任何特征:
- Bean 的状态没有特定客户端的数据。
- 在单个方法调用中,Bean 为所有客户机执行一个通用任务。例如,您可以使用无状态会话 Bean 发送确认在线订单的电子邮件。
- 该 Bean 实现了一个 Web 服务。
单例会话 Bean 适用于以下情况:
- 状态需要在整个应用程序中共享。
- 单个企业 Bean 需要由多个线程同时访问。
- 应用程序需要一个企业 Bean 在应用程序启动和关闭时执行任务。
- 该 Bean 实现了一个 Web 服务。
但是,如果出现以下情况,该怎么办:
- 无需在应用程序之间共享任何状态
- 单个企业 Bean 可由多个线程同时访问
- 启动或击落时无需执行任何任务
例如,假设我有一个具有以下界面的登录服务:
public interface LoginService {
boolean authenticate(String user, String password);
}
应该用@Singleton还是@Stateless注释?这两者有什么好处?如果LoginService需要注入一个EntityManager(将同时使用)怎么办?
加法:我正在考虑Spring服务bean的Java EE对应物,它们是无状态的单例。如果我正确地理解 Java EE 对应项是@Stateless会话 bean 和 @Singleton Bean 用于在启动时配置应用程序或在关机时进行清理,或者用于保存应用程序范围的对象。这是正确的吗?