@Aspect 어노테이션을 이용한 AOP 설정


우선 xml 정의에서 <aop:aspectj-autoproxy /> 를 선언해야 @Aspect 어노테이션이 적용된 빈객체를 Aspect 로 사용하게 된다.





@Aspect
@Order(3)
public class ProfilingAspect {

// 포인트 컷을 정의하고 그 포인트컷에서 호출할 
@Pointcut("execution(public * madvirus.spring.chap05.board..*(..))")
// 아래의 method 는 Pointcut 대상메소드가 호출될때 실행될 공통기능으로 정의된 빈클래스의 어떤 메소드가 호출될지를 정의함  
private void profileTarget() {}

 
// Around Advice를 구현... 
// @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

+ Recent posts