안녕하십니까.Java 웹 서비스 용 영구 단일 객체
현재 Apache Tomcat 7 서버에 배포 된 Java Web Service 프로젝트에서 작업 중입니다. 프로젝트의 필요에 따라, 나는 메모리 내의 모든 요청에 의해 생성 된 WS 쓰레드 중에서 글로벌을 유지할 필요가있다. - 서비스 클래스 (객체)
public class SingletonDesign {
private static boolean _instanceFlag = false;
private static final SingletonDesign _instance = new SingletonDesign();
private static GlobalObject _myGlobalObject;
private SingletonDesign() {
if(_instanceFlag == false) {
_myGlobalObject = new GlobalObject();
_instanceFlag = true;
}
}
public static GlobalObject getModel() {
if(_instanceFlag == false) {
_myGlobalObject = new GlobalObject();
_instanceFlag = true;
}
return _myGlobalObject;
}
public static int parseModel() {
if(_instanceFlag == false) {
_myGlobalObject = new ItemSimilarityModel();
_instanceFlag = true;
}
int val = _myGlobalObject.parseFromFile();
return val;
}
}
내가 요청을 수행 할 때마다 새로운 스레드가 내 웹에 생성 될 수 있다는 사실을 알고 : 따라서, 나는 다음과 같이 단일 디자인 패턴을 구현하기 위해 노력했다. 내 목표는 모든 스레드 중 메모리에 활성 상태로 남아 있으며 한 번만 생성되는 전역 SingletonDesign 개체를 갖는 것입니다. 위의 디자인이 내 기대에 따라 작동하고있는 것처럼 보이지만 사실 일지는 확실하지 않습니다. 그래서 내 질문 :
1) 왜 SingletonDesign 개체의 메서드는 정적이어야합니까? (나는 그들을 정적이 아닌 것으로 정의하려고 시도했지만, 내 Singleton 객체는 제대로 초기화되지 않았다.)
2) 위의 디자인은 싱글 톤 디자인 패턴의 Wikipedia 페이지에서 볼 수 있습니다. 나를 혼란스럽게하는 부분은 다른 Singleton 구현에서도 보았던 _instance 필드의 초기화입니다. 왜 우리가 그 물건을 필요로합니까?
3) 서버가 멈출 때까지 내 개체가 살아 있습니까? 나는 몇 가지 검사를했으며 살아있는 것처럼 보이지만 100 % 확신해야합니다.
시간 내 주셔서 감사합니다.
의존성을 관리하기 위해 Spring을 사용하면 이런 종류의 두통을 줄일 수 있습니다. –
여기서 싱글 톤 패턴을 사용하여 재검토해야합니다. 전역 상태를 도입하면 프로그램을 테스트 할 수없고 신뢰할 수 없게됩니다. 메모리 오버 헤드는 현재 환경에서 문제가되지 않습니다.읽으십시오 : http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons – Peter