외부 Pointcut 참조하기
XML설정으로 포인트컷을 관리하는 경우 -> 스프링 설정 파일에 포인트컷을 여러 개 등록, 애스펙트를 설정할 때 pointcut-ref 속성으로 특정 포인트컷을 참조할 수 있었음 -> 포인트컷 재사용 가능
하지만
어노테이션 설정으로 변경하고부터는 어드바이스 클래스마다 포인트컷 설정이 포함됨
따라서 비슷하거나 같은 포인트컷이 반복선언되는 문제 발생
(ex) public void allpointcut(){}에 대한 @Pointcut설정
이러한 문제를 해결하고자 포인트컷을 외부에 독립된 클래스로 설정
@Service
@Aspect
public class PointcutCommon(){
@Pointcut("execution(* com.springbook.biz..*Impl.*(..))")
public void allPointcut(){}
@Pointcut("execution(* com.springbook.biz..*Impl.get*(..))")
public void getPointcut(){}
}
매 클래스마다 계속해서 반복되는 포인트컷 메소드를 아예 한 클래스에 모아서 작성해 주는 것.
그래서 필요할 때마다 이 클래스에서 가져와서 사용
이후 다른 곳에서 필요한 경우 이렇게 쓴다.
@Service
@Aspect
public class BeforeAdvice{
@Before("PointcutCommon.allPointcut()")
public void beforeLog(Joint jp){
(...생략...)
}
}
본래는 @Pointcut("execution(* com.springbook.biz..*Impl.*(..))")
public void allPointcut(){} 이렇게 활용해야만 했던 것을
@Before("PointcutCommon.allPointcut()")
이렇게 한 줄로 외부에서 가져와서 해결한다.
실제 클래스에 있던 메소드와 어노테이션이 삭제되고 실제 메소드 위에 advice 시점을 표현하는 어노테이션에 저거 하나 추가되는 거!
간편하당!
캬하!
'건승하고있어요 > Spring framework' 카테고리의 다른 글
[Spring] 스프링2일차 - 어노테이션 기반 AOP 설정 (0) | 2018.02.12 |
---|---|
[Spring] 스프링2일차 - 어드바이스 동작 시점 (8) | 2018.02.11 |
[Spring] 스프링2일차 - 포인트컷 표현식 (2) | 2018.02.11 |
[Spring] 스프링2일차 - AOP용어 (0) | 2018.02.10 |
[Spring] 스프링2일차 - 스프링AOP (2) | 2018.02.09 |