ClassLoader의 loadClass 메소드를 가로 채고 싶습니다. ClassLoader에 의해 클래스를로드하는 프로세스를 표시합니다. 그러나 나는 aspectj의 작동 원리를 모른다. JDK의 소스 코드를 수정할 수 있습니까?AspectJ는 JDK 바이트 코드 수정을 지원합니까?
0
A
답변
1
디버거를 사용하고 프로세스를 단계별로 이해하면 이해할 수 있습니다.
AspectJ는 컴파일 (CTW, 컴파일 타임 짜기) 또는 클래스로드 (LTW,로드 타임 짜기) 중에 기존 클래스 파일에 aspect를 집어 넣을 수 있습니다.
LTW는 JDK 클래스에서 작동하지 않습니다. 그 이유는 이들 클래스가 항상 weaving 에이전트보다 먼저로드되기 때문입니다. 그래서 거기에 부트 스트랩 문제가 있습니다.
그러나 할 수있는 작업은 예를 들어 다음과 같은 클래스 파일에 CTW를 적용하는 것입니다. rt.jar
을 JRE/JDK 배포본에서 가져온 다음, 짠 클래스 파일을 다른 JAR 파일로 압축하고 원본 JAR 파일로 대체하십시오. 그런 다음 부팅 classpath에서 aspectjrt.jar
으로 JVM을 시작하면 작동하는 모습을 볼 수 있습니다. 나는 그 일을 이전에 해냈다. 그러나 실제로 이것은 AspectJ가 디자인 한 것이 아닙니다. 하지만 너는 물었다. 그래서 나는 너에게 말했다. 그것은 매우 진보 된 주제이지만, 나는 그것이 당신이 완전한 AspectJ greenhorn으로 가져 가야 할 길인지 의심 스럽습니다.
업데이트 : 내가 너무 자주이 질문을 되었기 때문에, 나는 JRE/JDK에 측면을 직조하는 방법을 보여주는 작은 demo project를 만들었습니다. 나는 아직도 정상적인 상황에서 그것을 사용하는 것이 타당하지 않다고 생각하지만, 도대체 왜 : 사람들은 왜 에베레스트 산을 오르는가? 존재하기 때문에. ;-)
나는 JDK 직조를위한 데모 프로젝트를 만들었습니다. 내 업데이트 답변을 참조하십시오. – kriegaex