문제

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).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top