다음을 수행하고 싶습니다.
try {
Class.forName("MyClass");
} catch(ClassNotFoundException e) {
ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.makeClass("MyClass");
Class.forName("MyClass");
}
시도했지만 항상 작동하지 않는 것 같습니다 ... 한 컨텍스트에서 작동하지만 다른 컨텍스트에서는 동일한 코드가 두 번째 "Class.forName ("MyClass ")"에서 충돌합니다 ... cc.toClass()
항상 호출 올바른 클래스를 가져오고 시도 cc.writeFile()
했지만 차이가 없습니다. 여하튼, 어떤 경우에는 두 번째 Class.forName이 클래스를 찾고 다른 경우에는 그냥 깨집니다 ... 뭔가 빠졌나요?
내 코드가 어디에서 호출했는지에 따라 다른 클래스 로더에서 클래스를 생성한다는 것을 알았습니다. 다음을 수행하여이 문제를 해결했습니다.
try {
Class.forName("MyClass");
} catch(ClassNotFoundException e) {
ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.makeClass("MyClass");
cc.toClass(this.getClass().getClassLoader(), this.getClass().getProtectionDomain());
Class.forName("MyClass");
}
toClass
적절한 Classloader를 사용 하여 메서드를 호출하면 트릭이 발생했습니다. 생성 된 클래스가 사용할 수있는 클래스 로더를 제어하는 방법이 확실하지 않았지만 classloader 매개 변수가있는 메서드는 내가 찾던 것을 정확히 허용합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다