@Aspect 어노테이션을 이용한 AOP 설정
우선 xml 정의에서 <aop:aspectj-autoproxy /> 를 선언해야 @Aspect 어노테이션이 적용된 빈객체를 Aspect 로 사용하게 된다.
@Aspect
// 포인트 컷을 정의하고 그 포인트컷에서 호출할
위처럼 포인트컷과 어드바이스를 분리하지 않고
@Before("execution(public * madvirus.spring.chap05..*(..))")
또는...
@Before 어노테이션 값으로 포인트컷 표현식이나 포인트컷 어노테이션이 적용된 메소드 이름이 올 수 있다.
우선 xml 정의에서 <aop:aspectj-autoproxy /> 를 선언해야 @Aspect 어노테이션이 적용된 빈객체를 Aspect 로 사용하게 된다.
@Aspect
@Order(3)
public class ProfilingAspect {
// 포인트 컷을 정의하고 그 포인트컷에서 호출할
@Pointcut("execution(public * madvirus.spring.chap05.board..*(..))")
// 아래의 method 는 Pointcut 대상메소드가 호출될때 실행될 공통기능으로 정의된 빈클래스의 어떤 메소드가 호출될지를 정의함
// 아래의 method 는 Pointcut 대상메소드가 호출될때 실행될 공통기능으로 정의된 빈클래스의 어떤 메소드가 호출될지를 정의함
private void profileTarget() {}
// Around Advice를 구현...
// @Around 어노테이션 값으로 @Pointcut 어노테이션을 적용한(할) 메소드의 이름을 지정함
// @Around 어노테이션 값으로 @Pointcut 어노테이션을 적용한(할) 메소드의 이름을 지정함
@Around("profileTarget()")
public Object trace(ProceedingJoinPoint joinPoint) throws Throwable {
String signatureString = joinPoint.getSignature().toShortString();
System.out.println(signatureString + " 시작");
long start = System.currentTimeMillis();
try {
Object result = joinPoint.proceed();
return result;
} finally {
long finish = System.currentTimeMillis();
System.out.println(signatureString + " 종료");
System.out.println(signatureString + " 실행 시간 : " + (finish - start)
+ "ms");
}
}
}
위처럼 포인트컷과 어드바이스를 분리하지 않고
@Before("execution(public * madvirus.spring.chap05..*(..))")
또는...
@Before("PublicPointcut.publicMethod()")
public void before() {
System.out.println("[LA] 메서드 실행 전 전처리 수행");
} @Before 어노테이션 값으로 포인트컷 표현식이나 포인트컷 어노테이션이 적용된 메소드 이름이 올 수 있다.
'IT > 스프링' 카테고리의 다른 글
JointPoint ..? (0) | 2012.01.06 |
---|---|
Advice..? (0) | 2012.01.06 |
AOP 몇가지.. (0) | 2012.01.05 |
registerShutdownHook ? (0) | 2011.12.29 |
스프링3.0 어노테이션 .. annotation (0) | 2011.12.28 |