AOP
FILTER, AOP, INTERCEPTOR 는 전처리/후처리 할수 있다. but넘겨받는 매개변수,수행시점이 틀림
- Filter 는 servlet request,servlet response, filterchain 전달받음 (Dispatcher servelt이 요청을 전달받기 전)
- INTERCEPTOR는 Httpservlet request, Httpservlet response, Model&view , exception 전달받음
INTERCEPTOR는 dispatchar 서블릿에서 controller 호출하기 전/후처리 가능.
- AOP는 메소드의 파라미터 값, return된 값 전달받음
AOP는 실제 작성한 객체의 메소드가 실행되기 전 후.
반복적으로 수행되면서 프로젝트를 가로지르는 횡단 관심사(Aspect)(필수 기능은 아니지만 반복 수행되는 작업.)
1. 로그기록 남기기(로깅)
2. 인증된 사용자인지 보안처리
묶어서 처리 하는 것이 AOP
실제코드의 변화는 없고, 부가적인 작업 추가해줌.
proxy : 간접접근 느낌.
spring이 proxy객체 생성해줌.
- target의 메소드 호출 전처리/후처리 가능
- 우리 눈에는 보이지 않지만 스프링이 자동생성해줌
target : 실제 controller, service 등 사용할 객체
advice : Aspect에 정의한 기능
joinpoints : target의 모든 메소드
Pointcut : joinpoints 중 공통기능이 적용된 녀석
Spring의 AOP 구현 클래스 관련 용어
용어 | 설명 |
Before Advice | Target의 메소드 호출 전에 적용 |
After returning | Target의 메소드 호출 이후에 적용 |
After throwing | Target의 예외 발생 후 적용 |
After | Target의 메소드 호출 후 예외의 발생에 관계없이 적용 |
Around | Target의 메소드 호출 이전과 이후 모두 적용(가장 광범위하게 사용됨) |
AOP 구현하기
0.
pom.xml에 추가
<!-- annotation 기반 AOP -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
1. servlet-context > namespace> aop 추가
<aop:aspectj-autoproxy /> 입력,
2.
AOPAdvice 클래스 만들고
@Aspect
@Component추가
3. servlet-context에 scan 추가
* 사용할 클래스랑 aop 랑 같은 곳에서 scan해야함
4.클래스 작성.