[英]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.