为了提高性能,如果无状态会话 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 用于在启动时配置应用程序或在关闭时清理或保存应用程序范围的对象。这个对吗?