如果我正确理解 EJB,@Singleton 实际上与普通 Java 中的 Singleton 以及 spring 中的单例相同 -> 一个实例,每个调用同时通过同一个实例。 @Stateless 声明一个 bean,它可以(但不能)有多个实例,但限制是同一时间只能有一个调用在一个实例中。对吗? 这仍然是我对 servlet 编程模型的看法:理论上 servlet 容器允许制作 servlet 的多个副本,实际上我还没有看到任何 servlet 容器这样做。 因此,假设我的代码中没有真正有限的资源,如门、窗或打印机(如果我有,我仍然可以用队列和其他东西解决它),真实的例子是什么,@Stateless 的使用优于使用@单例。
问候 莱昂
最佳答案
您可以拥有一个无状态 bean 的多个实例以增加吞吐量。
另一方面,只有一个单例实例。这样做的原因通常是在应用程序范围内共享状态、序列化对资源的访问等,这意味着锁定或同步。
所以如果你真的没有单例,那么使用无状态 bean。
如果你有一个“无状态单例”,没有区别。但是如果你读到“singleton”,按照惯例它有特殊的含义(=必须有使用单例模式的原因)。
关于java - EJB 中@Stateless 相对于@Singleton 的真实用例是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17115533/