패캠 스프링 초격차 Part1. Spring Framework-Ch.02 필기노트
AspectJ는 AOP를 제대로 사용하기 위해 꼭 필요한 라이브러리, 기본적으로 스프링 부트에 포함
별도의 Aspect를 생성하는 것은
UsefulAspect 퍼블릭 클래스를 생성해주고 그 클래스 위에
컴포넌트를 하나 붙혀서 빈으로 등록,
Aspect라는 어노테이션을 붙혀주면 이것은 하나의 Aspect(관점),
pointcut과 advice를 갖고 있는 Aspect를 만들게 된다.
import org.aspectj.lang.annotation.Aspect;
@Aspect
@Component // Conponent를 붙인 것은 해당 Aspect를 스프링의 Bean으로 등록해서 사용하기 위함
public class UsefulAspect{
}
해당 Apsect의 Advice 실행할 액션이 적용될 Join Point를 찾기 위한 조건 생성
포인트 컷 표현식이라고 부름
import org.aspectj.lang.annotation.Aspect;
@Aspect
@Component // Conponent를 붙인 것은 해당 Aspect를 스프링의 Bean으로 등록해서 사용하기 위함
public class UsefulAspect{
@Pointcut("execution(* transfer(..))")
private void anyOldTransfer(){
}
}
포인트컷들을 활용하여 포인트 컷의 전,후,주변에서 실행될 액션을 정의함
@Aspect
public class BeforeExaple {
@Before("com.test.myapp.CommonPointcuts.dataAccessOperation()")
public void doAccessCheck(){
// ...
}
}
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.AfterReturning;
@Aspect
public class AffterReturningExample {
@AfterReturning("com.test.myapp.CommonPointcuts.dataAccessOperation()")
public void doAccessCheck(){
// ...
}
}
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.ProceedingJoinPoint;
@Aspect
public class AroundExaple {
@AfterReturning("com.test.myapp.CommonPointcuts.businessService()")
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable{
// start stopwatch
Object retVal = pjp.proceed();
// stop
return retVal;
}
}