2013-05-10 2 views
1

JVM 시작시 추가 클래스를로드하고 싶습니다. 특히, 모든 코어 라이브러리가로드 된 후에 클래스가로드되어야합니다 (따라서 rt.jarlib/ext 이후).Java - JVM 시작시 추가 클래스로드

클래스는 어디에서도 참조되지 않습니다. 여기에는 모든 URL 연결에 사용할 JVM 전체 프록시를 설정하는 정적 블록이 포함되어 있습니다.

나는 -Xbootclasspath/a, -Xbootclasspath/p 옵션을 사용해 보았습니다. -verbose:classJVM_OPTS에 추가하면 -Xbootclasspath 변형에 의해 생성 된로드/열기 출력은 내 JAR이 단순히 "열렸을 때"모든 코어 라이브러리가 "로드"되었음을 나타냅니다.

모든 코어 클래스가로드 된 후 JVM 부팅시 강제로 클래스를로드하는 방법이 있습니까?

답변

0

연구 후 사용자 정의 클래스 로더보다 더 좋은 방법을 찾을 수 없었습니다.

다음은 내가 작성한 것입니다. 기본적으로 모든 클래스로드 메소드에 기본 클래스 로더를 사용하지만 사용자 정의 클래스로드/참조가 발생할 수있는 비 정적 이니셜 라이저에 대한 액세스를 제공합니다.

public class CustomClassLoader extends ClassLoader { 

    { 
     // Custom class loading goes in this non-static initializer. 
     loadClass("java.org.myorganisation.package.MyClass"); 
    } 

    public CustomClassLoader() { 
     super(CustomClassLoader.class.getClassLoader()); 
    } 

    public CustomClassLoader(ClassLoader parent) { 
     super(parent); 
    } 
} 

시스템 속성 -Djava.system.class.loader=com.anon.mypackage.CustomClassLoader을 정의하여 사용자 정의 클래스 로더를 지정하십시오.

+0

답변에서 "맞춤 클래스로드가이 정적 블록으로 이동합니다."라고 썼습니다. 로드 될 정적 클래스를 참조한다는 것입니까? 아니면 다른 것을 했니? 이 솔루션을 생각해 낸지 2 년이 지난 지금은 더 나은 방법을 찾았습니까? –

+0

@AndrewBate 제 설명 (코드가 잘못됨)과 코드가 수정되었지만 지금 테스트 할 수 없으므로 알려 주시면 알려주세요. 언급했듯이, 나는 오래전에 특정 유스 케이스에 대해 이것을 썼으며, 그 이후로 같은 목표를 다시 세우지 않았으므로 제안할만한 대안이 없다. 나는 비 정적 초기화가 필요하다는 것을 확실히 알지 못한다. 생성자 내에서 단순히 loadClass를 호출 할 수 있다고 생각했을 것이다.하지만 다시 한번, 나는이 접근법을 좋은 이유로 정착했다. :) – KomodoDave