Open LeeeeDain opened 1 year ago
@Aspect
.java
소스 코드를 컴파일러를 사용해서 .class
를 만드는 시점에 부가 기능 로직을 추가.class
파일을 JVM 내부의 클래스 로더에 저장하기 전에 조작하여 JVM에 올림@Aspect
AspectJ의 @Aspect 를 통해 Advisor를 간편하게 만들 수 있다.
@Aspect //Advisor로 변환해서 저장
public class LogTraceAspect {
@Around("execution(* hello.proxy.app..*(..))") //pointcut
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable { //advice
String meesage = joinPoint.getSignature().toShortString();
status = logTrace.begin(meesage);
joinPoint.proceed();
}
}
참고) @Aspect 하나에 여러 어드바이저 만들 수 있음
부가 기능 도입시 문제점
부가 기능을 한 곳에서 관리하도록 변경 어디에 적용할지 선택하는 기능 추가
Aspect를 사용한 프로그래밍 방식
J는 Java의 J AOP의 대표적인 구현 프레임워크 스프링도 AOP를 제공하지만 대부분 AspectJ의 문법 차용(직접사용 X), 기능 일부만 제공 제공 기능
부가 로직을 실제로 추가하는 방법
섹션8 - @Aspect AOP
@Aspect
스프링은
@Aspect
애노테이션으로 편리하게 포인트컷과 어드바이스로 구성되어있는 Advisor 생성 기능을 지원한다.관점 지향 프로그래밍(AOP)를 가능하게 하는 AspectJ 프로젝트에서 제공하는 애노테이션
자동 프록시 생성기(
AnnotationAwareAspectJAutoProxyCreator
)가@Aspect
를 찾아서 이것을Advisor
로 만들어준다.예제
횡단 관심사(cross-cutting concerns)
스프링 AOP