Spring Aspect Orientated Programming(AOP)
업데이트:
Aspect Orientated Programming(AOP)1
횡단 관심사(공통된 코드)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다.
특징
- Spring은 프록시 패턴을 사용한다.
- Proxy는 외부 메서드 호출만 인터셉트하여 동일 클래스 내 메소드 호출 시, 동작하지 않는다.
- Bean으로 정의된 Method를 대상으로만 적용이 가능하다.
용어
Aspect
횡단 관심사를 모듈화 한 것이다.
Target
Aspect를 적용하는 곳이다.
Advice
부가 기능(코드)을 담은 모듈이다.
Before Advice
- 메서드가 실행되기 전에 수행하는 모듈이다.
- @Before 어노테이션을 사용하여 정의한다.
Around Advice
- 메서드가 실행되기 전과 실행된 후에 각각 수행하는 모듈이다.
- @Around 어노테이션을 사용하여 정의한다.
After Advice
- 메서드가 실행된 후에 수행하는 모듈이다.
- @After 어노테이션을 사용하여 정의한다.
After Returning Advice
- 메서드가 정상적으로 실행되어 결과를 반환한 후에 실행하는 모듈이다.
- 결과를 반환한 후에 실행되므로, 메서드의 결과를 활용할 수 있다.
- @AfterReturning 어노테이션을 사용하여 정의한다.
After Throwing Advice
- 메서드가 실행 중 오류가 발생하였을 경우 실행하는 모듈이다.
- @AfterThrowing 어노테이션을 사용하여 정의한다.
JoinPoint
Advice가 적용 될 수 있는 위치이다.
PointCut
JoinPoint를 선정하는 방법이다.
execution
- JoinPoint를 선정할 메서드를 명시할 때 사용한다.
- 표현식 : execution([접근 제어자-생략 가능] [리턴 타입] [클래스 이름] [메서드 이름]([인자])
- 예제
Expression | Description |
---|---|
excution(public * *()) | 접근제어자가 public이고, 인자가 0개인 모든 메서드를 JoinPoint로 선정한다. |
excution(* com.gracefulsoul.spring.aop..(..)) | com.gracefulsoul.spring.aop 패키지에 있는 모든 클래스의 메서드 중 인자가 1개 이상인 메서드를 JoinPoint로 선정한다. |
excution(* com.gracefulsoul.spring.aop...(..)) | com.gracefulsoul.spring.aop 패키지와 하위에 있는 모든 클래스의 메서드 중 인자가 1개 이상인 메서드를 JoinPoint로 선정한다. |
excution(* insert()) | 메서드 명이 insert로 시작하는 인자가 1개인 메서드를 JoinPoint로 선정한다. |
excution(* insert(, *)) | 메서드 명이 insert로 시작하는 인자가 2개인 메서드를 JoinPoint로 선정한다. |
within
- 특정 타입에 속하는 메서드를 JoinPoint로 선정하도록 명시할 때 사용한다.
- 예제
Expression | Description |
---|---|
within(com.gracefulsoul.spring.aop.*) | com.gracefulsoul.spring.aop 패키지에 있는 모든 클래스의 메서드를 JoinPoint로 선정한다. |
within(com.gracefulsoul.spring.aop..) | com.gracefulsoul.spring.aop 패키지와 하위에 있는 모든 클래스의 메서드를 JoinPoint로 선정한다. |
bean
- Spring 2.5 이상부터 지원하며, Bean을 통해서 JoinPoint를 명시할 때 사용한다.
- 예제
Expression | Description |
---|---|
bean(blackBean) | Bean 이름이 blackBean인 클래스의 메서드를 JoinPoint로 선정한다. |
bean(!blackBean) | Bean 이름이 blackBean이 아닌 클래스의 메서드를 JoinPoint로 선정한다. |
Advisor
Advice와 PointCut을 합쳐서 부르는 용어이다.
Weaving
PointCut으로 결정된 JoinPoint에 Advice를 삽입하는 과정이다.
댓글남기기