Aop(asepect oriented programming)을 하는데 있어서 우리는 시점을 정할 수 있다. 이를 위해 간단하게 java의 실행 프로세스를 보면 다음과 같다.
이때 우리가 aop-weaving(크로스 커팅)할 수 있는 프로세스는 소스코드,컴파일 시점,바이트코드로 변환된시점, 클래스 로드시, 런타임(실행중)이렇게 크게 5가지로 구성된다.
현재는 사용되지 않음.
장점:
장점: 외부 라이브러리를 weaving할 수 있음
나머지는 compile-weaving과 동일
ClassLoader를 이용하여 클래스가 JVM에 로드 될 때 바이트 코드 조작을 통해 위빙이 되는 방식 RTW처럼 소스파일과 클래스 파일에 조작을 가하지 않아 컴파일 시간은 상대적으로 CTW보다 짧다. 하지만 오브젝트가 메모리에 올라가는 과정에서 위빙이 일어나기 때문에 런타임 시, 시간은 CTW보다 상대적으로 느리다. Application Context에 객체가 로드될 때, aspectj weaver와 spring-instrument에 의한 객체 handling이 발생하기 때문에 performance가 저하된다.
장점:동적인 weaving이 가능함. 또한 Compile,binary와 동일한정도의 효율성보임
런타임시 weaving하는 방식을 뜻하고 이는 다이나믹 프록시 형태구조이다.
장점으로는 Spring에서 빈등록하게 되면 자동으로 등록이 된다.(편하다)
단점으로는 오버헤드가 크게 발생하는것이다.
참고자료:
[spring-docs]
stack-overflow
Alex Villazon(ELSEVIER)
[개인블로그]
[java process]
[etc]