<aop:aspect id="logger" ref="logAop">
<aop:pointcut expression="within(com.javalec.ex.*)" id="publicM"/>
<aop:around pointcut-ref="publicM" method="loggerAop"/>
</aop:aspect>
</aop:config>

<aop:aspectj-autoproxy/>
<bean id ="logAop" class="com.javalec.ex.LogAop"/>
//<aop> 로직이 굉장히 짧아졌다
package com.javalec.ex;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect//이 클라스가 Aspect 역할을 합니다 ,공통 클래스
public class LogAop {
@Pointcut("within(com.javalec.ex.*)") //이 범위에서 공통기능이 적용됩니다 , 메소드 안의 내용은 필요 없음
private void pointcutMethod() {}
@Around("pointcutMethod()") //xml 에선 <aop:pointcut >했습니다 위에서 정해준 Pointcut 메소드를 사용합니다, 이 메소드가 pointcutMethod 를 찾아가고 Pointcut Method 가 지정한 범위에서 실행됩니다
public Object loggerAop(ProceedingJoinPoint joinpoint) throws Throwable{
String signatureStr = joinpoint.getSignature().toShortString();
System.out.println(signatureStr + "is start.");
long st = System.currentTimeMillis();
try {
Object obj = joinpoint.proceed();
return obj;
}
finally {
long et = System.currentTimeMillis();
System.out.println(signatureStr + "is finished");
System.out.println(signatureStr + "경과시간 : " +(et - st));
}
}
@Before("within(com.javalec.ex.*)") //핵심기능이 실행되기 전에 이 메소드가 실행됩니다
public void beforeAdvice() {
System.out.println("beforeAdvice()");
}
}
