[英]Share an instance of a class across a JAX-WS or JAX-RS Webservice
我建立了一个类(称为RecordManager
)来管理文件系统上的数据。 我想进行更改此类状态的SOAP或REST调用。 但是,我只想让对服务器的每次调用都运行一个此类的实例。
如何创建此类的一个实例,并在所有JAX-WS或JAX-RS调用下都能使用它? 理想情况下,我只想致电:
@GET
public ... (...){
rec_man.update( <parameters passed by call> )
}
其中rec_man
是实例RecordManager
我可以肯定地说,我已经确保此类的线程安全。
public class RecordManager {
public static final RecordManager INSTANCE = new RecordManager();
private RecordManager() {
// private constructor prevents instantiation
}
}
您的JAX-WS服务或JAX-RS资源将像这样引用RecordManager:
@GET
public ... (...){
...
rec_man = RecordManager.INSTANCE;
rec_man.update( <parameters passed by call> )
}
或者,如果您不喜欢这种样式(将单个实例作为公共静态实例),则可以隐藏该静态实例并公开一个静态方法来获取它。
public class RecordManager {
private static RecordManager instance;
private RecordManager() {
// private constructor prevents instantiation
}
public static RecordManager getInstance() {
if (instance == null) {
instance = new RecordManager();
... init
}
return instance;
}
}
您的用法变为:
@GET
public ... (...){
...
rec_man = RecordManager.getInstance();
rec_man.update( <parameters passed by call> )
}
请注意,如果您的实例化逻辑必须是线程安全的(例如, 永远只能初始化一次),那么你可以做getInstance
方法synchronized
或描述的技术之一这篇文章 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.