싱글 톤 패턴을 탐구하는 동안이 점을 발견했습니다.
Singleton 클래스가 2 개의 다른 클래스 로더에 의해로드되면 각 클래스 로더에 대해 하나씩 2 개의 다른 클래스가 있습니다.
JVM에서 두 개의 클래스 로더를 사용할 수있는 방법과 그 방법을 모르겠습니다.
Java EE에서는 일반적으로 여러 ClassLoader가 발생합니다. Java EE 애플리케이션 서버는 클래스 로더 트리에 의해 배치 된 War / EAR에서 클래스를로드합니다. 이러한 방식으로 수행하는 이유는 하나의 응용 프로그램을 다른 응용 프로그램에서 격리하지만 배포 된 모듈간에 클래스를 공유하기 때문입니다. 클래스가 진정으로 싱글 톤이되도록하려면 동일한 클래스 로더가 싱글 톤을로드하는지 확인해야합니다. 이렇게 할 수 있습니다
private static Class getClass(String clazz) throws ClassNotFoundException {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if(loader == null)
loader = YourSingleton.class.getClassLoader();
return (loader.loadClass(clazz));
}
}
참고 Java의 Enum은 이미 싱글 톤 패턴을 구현합니다.
업데이트 됨 다중 클래스 로더가 무엇이며 어떻게 문제를 해결하는지 설명해 주시겠습니까?
도서관이 있다고 가정 해 봅시다 Foo
. 프로젝트의 Foo_version1.jar
일부에는 Foo_version2.jar
. 그래서 classpath
당신은 Foo_version1.jar
및 Foo_version2.jar
. 이제 클래스 로더 필요가 클래스로드 Bar
에서를 Foo
처음부터 그것을로드, Foo_versionX
그것은에서 찾은 것을 classpath
. 이 문제를 해결하려면 다른 클래스 로더가 필요합니다. 프로젝트의 일부에는 Bar
클래스 jar
로더에 의해로드 된 것과 다른 클래스가 필요하기 때문 입니다.
위에서 언급 한 코드를 사용하여 둘 이상의 클래스 로더가 클래스를로드하려고하면 항상 동일한 인스턴스가 사용되도록합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다