본문 바로가기

Spring

[Spring] AOP(Aspect Oriented Programming)

 

관점 지향 프로그래밍 (AOP)

기존 객체지향 프로그래밍에서는 공통관심사항을 여러 모듈에서 적용하면서 중복된 코드를 양산하는 한계가 존재했다. AOP는 이러한 문제를 해결하기 위한 핵심관심사항과 전체에 적용되는 공통관심사항을 분리하면서 한계를 극복할 수 있도록 도와준다.


 

AOP 용어

Aspect - 여러 객체에서 공통으로 적용되는 공통관심 사항 (트랜잭션, 로깅, 보안...)
JointPoint - 공통 관심사항이 적용되는 지점(크로스 되는 지점), 호출되는 부분
PointCut - 범위를 지정, 누구에게 대상을 설정할 것인지 결정 who
Advice - 어느 시점에 공통 관심사를 적용할 것인지 결정(메서드 수행 전/후, 예외발생 후..)  when

weaving - 어떤 Advice를 어떤 Pointcut에 적용할 것인지에 대한 설정 (Advisor)


 

AOP 설정

 

 

  • <aop:config> : aop설정의 root 태그,  weaving들의 묶음.
  • <aop:aspect> : Aspect 설정 , 하나의 weaving에 대한 설정
  • <aop:pointcut> : Pointcut 설정
  • <aop:before> : 메서드 실행 전 실행될 Advice
  • <aop:after-returning> : 메서드 정상 실행 후 실행될 Advice
  • <aop:after-throwing> : 메서드에서 예외 발생시 실행될 Advice
  • <aop:after> : 메서드 정상 또는 예외 발생 상관없이 실행될 Advice - finally
  • <aop:around> : 모든 시점에서 적용시킬 수 있는 Advice

 

<aop:pointcut>

AspectJ 표현식을 통해 pointcut 지정

  • id : 식별자로 advice 태그에서 사용됨
  • expression : pointcut 지정

execution(수식어 리턴타입 패키지 클래스이름 메서드이름(파라미터))

execution(protected * abc.zyx..*Service.set*(..)

- protected의 제한자를 가지며 리턴타입은 모든 타입이 올 수 있다.  abc.zyx 패키지와 그 하위 패키지에 있는 모든 클래스 중에서 service로 끝나는 클래스들 중에서 set으로 시작하는 메서드이며 파라미터는 0개 이상 오며 타입은 상관없다.