문제
Bean 스크립팅 프레임 워크를 통해 Rhino를 사용하여 Java 프로세스에서 객체를 작성하고 구성합니다. 스크립트에 사용 된 클래스 중 일부는 항상 표준 클래스 경로에 있지 않기 때문에 동적으로로드해야합니다.
이 클래스를로드하기 위해 보조 디렉토리에서 이러한 클래스를로드하는 사용자 정의 클래스 로더로 스크립팅 프레임 워크의 컨텍스트 공장을 초기화합니다. 이것은 잘 작동합니다.
문제는이 클래스 중 일부, 생성자 에서이 보조 디렉토리에서로드되어야하는 다른 클래스를 사용한다는 것입니다. 소스를 보면 JavaScript 엔진이 단순히 생성자를 호출하는 것입니다.
NewInstance 호출이 사용하는 클래스 로더를 어떻게 알 수 있습니까? 표준 클래스 로더가로드하는 방법을 모르는 클래스를 수동으로로드 할 수 있도록 내 직접 주입 할 수 있습니까?
해결책
클래스 로더의 상위 클래스 로더를 응용 프로그램 클래스 로더로 설정하십시오.
ClassLoader myLoader = new ClassLoader(getClass().getClassLoader()) {
... your code loading from custom directory ...
}
로더에서로드 된 클래스는 로더를 사용하여 다른 클래스를 조회하여 로더를 제공해야합니다 (부모에게 위임하여).
다른 팁
Constructor.newInstance
a Constructor
특정에 속하는 경우입니다 Class
특정에 의해로드 된 인스턴스 ClassLoader
. 클래스는 자신의 클래스 로더를 통해 연결됩니다.
단일 arg Class.forName
즉각적인 발신자의 클래스 로더를 사용합니다 (매우 장난 꾸러기 API).
제휴하지 않습니다 StackOverflow