Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaee中的无状态单例_Java_Jakarta Ee - Fatal编程技术网

javaee中的无状态单例

javaee中的无状态单例,java,jakarta-ee,Java,Jakarta Ee,我想在JAVA-EE中定义一个“无状态单例”,它可以被多个线程同时访问 我所说的无状态是指:Bean实例没有字段 我应该使用哪一个: 第1版: @javax.ejb.Singleton @ConcurrencyManagement(ConcurrencyManagementType.BEAN) public class MyStatelessSingleton { .. } 第2版: @ApplicationScoped public class MyStatelessSingleton {

我想在JAVA-EE中定义一个“无状态单例”,它可以被多个线程同时访问

我所说的无状态是指:Bean实例没有字段

我应该使用哪一个:

第1版:

@javax.ejb.Singleton
@ConcurrencyManagement(ConcurrencyManagementType.BEAN)
public class MyStatelessSingleton {
..
}
第2版:

@ApplicationScoped
public class MyStatelessSingleton {
..
}
第3版:

@javax.inject.Singleton
public class MyStatelessSingleton {
..
}

顺便说一句,我看不到将“无状态实例”集合起来而不是一个“无状态单例bean”的好处。

我认为这并不重要。这是单身汉。它的无状态/全状态性质将只取决于您如何实现它
ApplicationScoped
是我在这里的最爱。

我认为重要的是,@ApplicationScoped'由servlet容器管理,而@javax.ejb.Singleton由ejb容器管理。如果客户端没有web会话并且只在ejb容器中使用“MyStatelessSingleton”,这有关系吗?使用适合您的一个。无状态的意思是,您的Bean实例没有字段?否则,如果使用带字段的无状态bean,则池化无状态实例(@stateless)可以帮助您与没有并发管理的单例实例进行比较。在对bean的一次调用期间,您可以安全地使用实例的字段,因为在该调用期间,实例属于您的线程。如果bean实例使用对同一bean中其他方法的调用,这有助于避免参数的长列表。这可能不是一个很好的解决方案,但它确实发生了。对于停用并发管理的Singleton,这些字段有被其他线程操作的危险。但是你也可以在这样的单例中使用字段,如果你定义它们ThreadLocal或者用Atomic处理它们……是的,我也倾向于使用'@ApplicationScoped'。我找不到使用“版本1”的任何好处。顺便说一下,我想对无状态DAO使用“无状态单例”模式(典型的JPA-CRUD,其中entityManager在方法参数中提供)。所以我想,无状态单例比使用“@stateless”要好。但是如果bean是无状态的,那么只有当您使用非单例bean时,statefull才起作用,因为容器可能在单个进程中处理实例,因为它是否是该bean的同一个实例并不重要。单身汉总是一样的。此外,全豆有其生命周期。很难说单例中有生命周期。我只是决定使用“单例”而不是“无状态”来节省内存:因为我不想在每次注入时注入新的(无状态)实例或从一堆池实例中注入。我不需要有状态bean,也不需要池实例。我看不到将“无状态实例”集合起来而不是一个“无状态单例bean”的好处