[spring] Annotation 기반 AOP 설정
Annotation 사용을 위한 XML 설정
<aop:aspectj-autoproxy/>
advice, pointcut, aspect 필요
애스팩트 선언
Aspect
선언
@Aspect
public class Advice2 {...}
메모리에 띄우기 위해 Component
추가
@Component
@Aspect
public class Advice2 {...}
포인트컷 선언
pointcut
추가
@Component
@Aspect
public class Advice2 {
@Pointcut("execution(* user.service.*Service.login(..))")
public void point(){} // id 역할을 하는 함수
}
after-returning
만 결과값 핸들링이 가능하다.
@Component
@Aspect
public class Advice2 {
@Pointcut("execution(* user.service.*Service.login(..))")
public void point(){} // id 역할을 하는 함수
@AfterReturning(pointcut="point()", returning="obj")
public void log(JoinPoint jp, Object obj){
System.out.println("==== log start ======");
System.out.println("이름: "+jp.getSignature().getName());
System.out.println("결과값: "+ obj);
System.out.println("==== log end ======");
}
}
component-scan
이 되도록 한다.
<context:component-scan base-package="user, aop" />
아이콘에 S
가 표시된다.
성능 테스트 하는 around 추가
원래 메소드를 수행하기 위해서 ProceedingJoinPoint
가 필요하다.
@Around(value = "point()")
public Object aroundlog(ProceedingJoinPoint pp) throws Throwable{
long start = System.currentTimeMillis();
Object obj = pp.proceed();
long end = System.currentTimeMillis();
String name = pp.getSignature().getName();
System.out.println("(" + name + ") 메소드 수행에 걸린 시간: " + (end-start) + "ms");
return obj;
}
실행결과
UserDAO_JDBC
로그인 되었습니다. admin님
(login) 메소드 수행에 걸린 시간: 598ms
외부 Pointcut 참조하기
Advice 설정
파라미터 받기
'Programming > Spring' 카테고리의 다른 글
[spring] 데이터 접근 디자인 패턴 (0) | 2016.04.23 |
---|---|
[spring] 다국어 지원 (0) | 2016.04.22 |
[spring] XML 기반 AOP 설정 (0) | 2016.04.21 |
[spring] AOP (Aspect Oriented Programming) (0) | 2016.04.21 |
[spring] Annotation 기반 설정 (0) | 2016.04.20 |
댓글