AOP(Aspect Oriented Programming) 말 그대로 관점 지향 프로그래밍이다.
예로 스프링에서 @Transactional 어노테이션이 AOP로 구현된다.
코드가 많은 트랜잭션 처리를 쉽게 할 수 있다는 장점이 AOP를 잘 설명 해주는 것 같다.
기본적인 용어
advice(어드바이스): 실행할 부가적인 기능(실제 코드)
target(타겟): 어드바이스를 적용할 대상 객체
joinpoint(조인포인트): 어드바이스를 삽입할 특정 지점
pointcut(포인트컷): 조인포인트를 선별하기 위한 정의
weaving(위빙): 포인트컷으로 선별된 조인포인트에 어드바이스를 삽입하는 과정
위빙 방법
Spring AOP
프록시 기반(Proxy-based) AOP이며, JDK dynamic proxies 와 CGLIB을 사용할 수 있다.
둘의 차이점은 인터페이스 유무와 성능정도가 되겠다.
둘 모두, Runtime Weaving이라, 런타임 오버헤드가 있다.
AspectJ
기본적으로 컴파일 시점에 위빙이 된며, LTW를 사용할 수도 있다.
CTW(compile-time weaving): 컴파일 시점에 위빙
LTW(load-time weaving): JVM에서 클래스 파일 로드 시점에 위빙
런타임 오버헤드가 없다는 것이 가장 큰 장점이 아닌가 싶다.
둘의 차이점은 컴파일 및 실행 설정에 불과하다.
ref:
http://www.eclipse.org/aspectj/doc/next/devguide/index.html
https://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-understanding-aop-proxies
'dev > java' 카테고리의 다른 글
Spring @Validated 어노테이션 사용하기 (0) | 2018.07.22 |
---|---|
change maven local repository path (1) | 2018.04.09 |
java.util.LinkedHashMap cannot be cast to ... (0) | 2017.11.26 |
JPA 개념 (0) | 2017.04.05 |