AOP는 Aspect Of Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 이는 어떤 로직을 기준으로 핵심적인 관점, 부과적인 관점으로 나누어서 보고 그 관점을 기준으로 모듈화 하겠다는 것을 의미한다.
기존 OOP 에서는 공통관심사항을 여러 모듈에서 적용하는데 있어 중복된 코드를 양상하는 한계가 존재하여 등장하게 되었다.
System.currentTimeMillis()
를 사용용어 | Description |
---|---|
Target | 핵심기능을 담고 있는 모듈로 target은 부가기능을 부여할 대상이 됨 |
Advice | 어느 시점에 어떤 공통관심기능을 적용할지 정의한 것 |
JointPoint | Aspect가 적용 될 수 있는 지점, target 객체가 구현한 인터페이스의 모든 method는 JointPoint가 된다. |
Pointcut | 공통 관심 사항이 적용될 JointPoint |
Pointcut 표현식은 execution으로 시작하고 method의 Signature 를 비교하는 방법을 주로 이용한다. | |
Aspect | 여러 객체에서 공통으로 적용되는 공통 관심 사항. |
AOP의 기본 모듈 | |
Advisor | Advisor = Advice + pointcut |
Weaving | 어떤 Advice를 Pointcut 에 적용시킬 것인지에 대한 설정 |
POJO class 를 이용한 AOP 구현
XML Schema 확장 기법을 통해 설정 파일을 작성
Tag | desc |
---|---|
<aop:config> | AOP 설정의 root 태그 (weaving 들의 묶음) |
<aop:aspect> | Aspect 설정 (하나의 weaving에 대한 설정) |
<aop:pointcut> | Pointcut 설정 |
Tag | desc |
---|---|
<aop:before> | method 실행 전 실행 될 Advice |
<aop:after-returning> | method가 정상 실행 후 실행 될 advice |
<aop:after-throwing> | method에서 예외 발생시 실행 될 advice. |
<aop:after> | method가 정상 또는 예외발생에 상관없이 실행 될 advice |
<aop:around> | 모든 시점(전,후)에서 적용시킬 수 있는 advice |
<aop:pointcut>
POJO 기반 Advice Class 작성
Spring API 를 이용한 AOP 구현
Annotation 을 이용한 AOP 구현
@Aspect
Annotation 을 이용하여 AOP를 구현한다.
→ 설정 파일에 <aop:aspectj-autoproxy/>
를 추가해야한다.
@Pointcut()
을 통해서 적용할 대상을 지정Around()
, After()
, Before()
, AfterReturning()
, AfterThrowing()
등을 사용하여 적용할 시점을 선택