내 목표는 런타임에 클래스 파일의 위치를 구체적으로 모르는 채로 클래스의 바이트 코드를 나타내는 byte []에 액세스하는 것입니다.클래스 바이트에 액세스 하시겠습니까?
두 가지 솔루션을 살펴본 결과 중 하나에서 약간의 성공을 거둘 수 있었지만 다른 방법으로 구현할 수 있는지 궁금한 점이있었습니다. 일하러 간다.)
첫 번째 (약간) 성공적인 해결책은 java.lang.instrumentation ClassFileTransformer 클래스를 사용하여 클래스의 byte []에 액세스하는 것이 었습니다. 이 workek, 나는 이것을 달성하는 더 깨끗한 방법이 있어야한다고 생각했다.
두 번째 해결책은 -Xbootclasspath JVM 인수를 사용하여 java.lang.ClassLoader를로드 한 클래스의 byte []에 액세스 할 수 있도록 내 자신으로 대체하는 것이 었습니다. 간단한 System.out.println 디버그 메시지를 추가하여 ClassLoader의 재정의가 작동하는지 확인했지만 실제로는 그렇지 않습니다. 나는 같은 주제에 대해 this paper에서이 아이디어를 얻었다. 내 수업은 Linked Paper에서 Integer 클래스가 다시 작성된 것과 비슷하게 만들어졌습니다. 나는 또한이 같은 뭔가를 찾고 JVM 인수 유사한 디렉토리 설정을 사용 :
java -Xbootclasspath/p:.\out\production\boot\java\lang TestLoader
내 생각이 클래스 로더 클래스는 특별히 내가 링크 된 종이의 방법을 사용하여 오버라이드 (override) 할 수 없다는 것입니다.
ClassLoader를 재정의하려는 내 시도가 작동하지 않는 이유와 클래스의 바이트 []에 액세스하기 위해 수행 할 수있는 다른 작업을 듣는 것이 흥미 롭습니다.
* * 아니, 그건에 전략이다 "내 목표는 바이트 [] 클래스의 바이트 코드를 나타내는 액세스 할 수있다" 이름없는 목표를 달성하십시오. 어떤 * 기능 * (즉,목표) 당신은 이것의 무엇이든을해서 최종 사용자에게 제안하고 싶은가? –
이것은 교육적인 질문 일 뿐이므로 나는이 전략을 활용할 필요가있는 제품을 개발하지 않을 것입니다. – mburke13