2009-10-30 7 views
0

자바 스크립트 프로세스에서 객체를 만들고 구성하기 위해 bean 스크립팅 프레임 워크를 통해 rhino를 사용하고 있습니다. 스크립트에서 사용되는 일부 클래스는 항상 표준 클래스 경로에 있지 않으므로 동적으로로드해야합니다.Constructor.newInstance의 사용자 정의 클래스 로더

이러한 클래스를로드하려면 보조 클래스 디렉토리에서 이러한 클래스를로드하는 사용자 정의 클래스 로더를 사용하여 스크립팅 프레임 워크의 컨텍스트 팩토리를 초기화합니다. 이것은 잘 작동합니다.

문제는 생성자에서 이러한 클래스 중 일부는이 보조 디렉토리에서로드해야하는 다른 클래스를 사용한다는 것입니다. 소스를 보면 javascript 엔진이 단순히 Constructor.newInstance를 호출하는 것을 볼 수 있습니다.

newInstance 호출이 사용하는 클래스 로더를 어떻게 알 수 있습니까? 내 자신을 삽입 할 수 있으므로 표준 클래스 로더가로드하는 방법을 알지 못하는 클래스를 수동으로로드 할 수 있습니다.

답변

1

클래스 로더의 상위 클래스 로더를 응용 프로그램 클래스로 설정해보십시오. 로더가

0

Constructor.newInstance가 속한 Constructor 인스턴스에 운영 (부모에게 위임하여)들을 제공 할 필요가 귀하의 로더에서로드

ClassLoader myLoader = new ClassLoader(getClass().getClassLoader()) { 
... your code loading from custom directory ... 
} 

클래스는, 다른 클래스를 조회하기 위해 로더를 사용합니다 특정한 ClassLoader에 의해로드 된 특정 Class 인스턴스. 클래스는 자체 클래스 로더를 통해 링크됩니다.

단일 인수 Class.forName은 직접 호출자의 클래스 로더를 사용합니다 (이는 매우 장난 꾸러기 API입니다).