본문 바로가기

건승하고있어요/Spring framework

[Spring] 스프링2일차 - 외부 Pointcut 참조하기

반응형

외부 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 시점을 표현하는 어노테이션에 저거 하나 추가되는 거!

간편하당! 

캬하!


반응형