[AOP] 어노테이션 기반

2021. 10. 8. 12:06spring

1. xml 파일에 <aop:aspectj-autoproxy /> 엘리먼트 선언

 

2. AOP 관련 어노테이션들을 어드바이스 클래스에 설정

@Aspect가 설정된 애스팩트 객체에는 반드시 포인트컷과 어드바이스를 결합하는 설정이 있어야 한다.

아래 예시에서, LogAdvice 클래스 위에 @Aspect가 설정되었으므로 스프링컨테이너는 LogAdvice 객체를 애스팩트 객체로 인식한다.

 

allPointcut()과 getPointcut() 메소드 위에 각각 @Pointcut 선언

"allPointcut()"과 "getPointcut()"은 각각 참조 메소드이름이 된다.

 

@Before는 어드바이스 어노테이션으로서 괄호를 추가하고 참조 메소드를 지정하여 포인트컷을 참조한다.

 

allPointcut() 참조 메소드로 지정한 비즈니스 메소드가 호출될 때, pringLog()메소드가 Before형태로 동작한다

 

결과 화면

 


1. 포인트컷을 외부 독립된 클래스로 따로 설정

클래스마다 비슷하거나 같은 포인트컷이 반복 선언되는 문제를 해결하기 위해 

시스템에서 사용할 모든 포인트컷을 PointcutCommon 클래스에 등록

 

2. 사전 처리 기능 구현

클래스이름과 참조메소드 이름을 조합하여 지정

결과화면


JoinPoint

클라이언트가 호출하는 모든 비즈니스 메소드를 말함

 

JoinPoint 인터페이스

클라이언트가 호출한 비즈니스의 메소드 정보를 제공

 

JoinPoint에서 제공하는 메소드

  • getSignature() 클라이언트가 호출한 메소드의 시그니처 정보가 저장된 객체 리턴(getName(), toLongString(), toShortString()의 메소드를 제공함)
  • getTarget() 클라이언트가 호출한 비즈니스 메소드를 포함하는 객체 리턴
  • getArgs() 클라이언트가 메소드를 호출할 때 넘겨준 인자 목록을 Object 배열로 리턴

Execution 명시자 포인트컷 표현식(리턴타입+패키지경로+클래스명+메소드명,매개변수)

참고

'spring' 카테고리의 다른 글

[트랜잭션]  (0) 2021.10.08
[스프링JDBC]  (0) 2021.10.08
[AOP] xml 기반  (0) 2021.10.07
[어노테이션]  (0) 2021.10.06
[의존성주입] Setter 인젝션  (0) 2021.10.06