2011-11-02 3 views
0

입력 스트림에 클래스의 완전한 소스 코드가 있습니다. Javassist를 사용하여이 클래스에 대해 새로운 CtClass 객체를 만들 수 있습니까?Javassist를 사용하여 소스 코드에서 클래스를로드하는 방법은 무엇입니까?

ClassPool.getDefault().makeClass("name_of_the_new_class"); 

하지만 내 경우에는 내가 미리 클래스의 이름을 모른다, 그러나 다만 :

나는 클래스의 이름이 같은 뭔가 새로운 CtClass 개체를 만들 수 있습니다으로 알고 그 완전한 소스 코드 (물론 소스 코드를 파싱하는 클래스의 이름을 얻을 수 있지만 해결책의 일부라고 나에게 말하지 말아라 :-))

답변

2

소스 파일을 컴파일하려면 - 플라이, ToolProvider.getSystemJavaCompiler()뿐만 아니라 도구 API를 살펴보십시오. 거기에서 소스에서 .class 파일을 컴파일하고 필요할 경우 클래스 로더를 사용하여로드 할 수 있습니다.

또한 새 클래스 풀을 사용하여 ByteArrayClassPath을 사용하여 생성 된 클래스 파일의 바이트에서 Javassist를 사용하여 CtClass를 만들 수 있습니다.

관련 문제