[F-Lab 챌린지 44일차 TIL]

성수데브리·2023년 8월 10일
0

f-lab_java

목록 보기
35/73

Weaving

  • weaving 이란 aspect를 타깃에 적용하는 과정이다.
  • weaving 은 위빙 시점에 따라 4가지로 나뉜다
    • Runtime Weaving
    • Compile Time Weaving (CTW)
    • Load Time Weaving (LTW)
    • Post-Compile Weaving (PCW)

Runtime Weaving

  • 위에 언급된 JDK 다이나믹 프록시와 CGLIB 방식의 위빙은 런타임에 이뤄진다.

AspectJ의 Weaving 시점: CTW, PTW, LTW

AspectJ 위빙의 조건

  1. AspectJ 형식의 Aspect
    • .aj 파일로 구현된 Aspect
    • .Java 파일로 구현된 Aspect (@AspectJ 애노테이션 기반)
  2. AspectJ Runtime : AJC에 포함된 객체의 정보를 토대로 위빙된 코드를 타깃에게 적용
  3. AspectJ Weaver : Aspect와 타깃의 바이트 코드를 위빙하고, 위빙된 바이트 코드를 컴파일러에게 제공하는 역할
  4. AspectJ Compiler(AJC) : 컴파일 과정에서 타깃의 바이트코드 조작을 통해 위빙을 수행한다.

Compile Time Weaving

  • weaving 시점 : AJC(AspectJ Compiler)를 이용해서 클래스가 컴파일될 때 위빙한다.

Post-Compile Time Weaving

  • 컴파일된 바이너리 코드에 위빙 한다.
  • 그래서 Binary Weaving 이라한다.

Load Time Weaving

  • Class Loader가 클래스를 로딩할 때 Java Agent 가 컴파일된 클래스 파일과 Aspects 를 위빙한다.

  • CTW, PTW 과 차이점은 컴파일된 파일에 위빙하는 것이 아니라 JVM 에 로드되기 직전에 위빙한다

  • LTW 동작 순서

    JVM 이 클래스를 로드할때마다 agent 에 알림을 보내면 agent 가 타깃 클래스를 인터셉트해서 Aspect 를 위빙한다. 이 위빙된 바이트 코드가 JVM 에 로딩된다.

    1. Deploy an application.
    2. VM initializes the weaving agent.
    3. The weaving agent loads all aop.xml files (Yes, we can define multiple aop.xml files and everything gets loaded).
    4. Weaving agent loads listed aspects in aop.xml files.
    5. The system starts normal execution.
    6. VM loads classes during execution (as usual).
      **7. The VM notifies the weaving agent whenever it loads a class.
    7. 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.
    8. If so, the weaving agent will weave the class and the aspect.
    9. The woven byte code will be loaded to VM and used.**

Java Agent

0개의 댓글