싱글 톤 패턴의 ClassLoader

시바 쿠마르

싱글 톤 패턴을 탐구하는 동안이 점을 발견했습니다.

Singleton 클래스가 2 개의 다른 클래스 로더에 의해로드되면 각 클래스 로더에 대해 하나씩 2 개의 다른 클래스가 있습니다.

JVM에서 두 개의 클래스 로더를 사용할 수있는 방법과 그 방법을 모르겠습니다.

sol4me

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.jarFoo_version2.jar. 이제 클래스 로더 필요가 클래스로드 Bar에서를 Foo처음부터 그것을로드, Foo_versionX그것은에서 찾은 것을 classpath. 이 문제를 해결하려면 다른 클래스 로더가 필요합니다. 프로젝트의 일부에는 Bar클래스 jar로더에 의해로드 된 것과 다른 클래스가 필요하기 때문 입니다.

위에서 언급 한 코드를 사용하여 둘 이상의 클래스 로더가 클래스를로드하려고하면 항상 동일한 인스턴스가 사용되도록합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사