.aj
파일로 구현된 Aspect.Java
파일로 구현된 Aspect (@AspectJ 애노테이션 기반)Class Loader가 클래스를 로딩할 때 Java Agent 가 컴파일된 클래스 파일과 Aspects 를 위빙한다.
CTW, PTW 과 차이점은 컴파일된 파일에 위빙하는 것이 아니라 JVM 에 로드되기 직전에 위빙한다
LTW 동작 순서
JVM 이 클래스를 로드할때마다 agent 에 알림을 보내면 agent 가 타깃 클래스를 인터셉트해서 Aspect 를 위빙한다. 이 위빙된 바이트 코드가 JVM 에 로딩된다.
- Deploy an application.
- VM initializes the weaving agent.
- The weaving agent loads all aop.xml files (Yes, we can define multiple aop.xml files and everything gets loaded).
- Weaving agent loads listed aspects in aop.xml files.
- The system starts normal execution.
- VM loads classes during execution (as usual).
**7. The VM notifies the weaving agent whenever it loads a class.- The weaving agent (after being notified), inspects the to-be-loaded class to determine if any of the aspects need to be woven to the to-be-loaded class.
- If so, the weaving agent will weave the class and the aspect.
- The woven byte code will be loaded to VM and used.**
JAVA Instrumentation API - BESPIN Tech Blog Kubernetes 환경을 위한 자바 에이전트 개발기datadog, pinpoint, scouter 과 같은 오픈소스들에서 사용한 핵심 기술인 Instrumentation API