반응형
- 코드 예시
import org.aspectj.lang.JoinPoint;
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
public class logAop {
// @Pointcut("execution(public void get*(..))");
// @Pointcut("execution(* com.javalec.ex.*.*())");
// @Pointcut("execution(* com.javalec.ex..*.*())");
// @Pointcut("execution(* com.javalec.ex.Worker.*())");
// @Pointcut("within(com.javalec.ex.*)");
// @Pointcut("within(com.javalec.ex..*)");
// @Pointcut("within(com.javalec.ex.Worker)");
@Pointcut("bean(*ker)") //~ker로 끝나는 빈에만 적용
private void pointcutMethod() {
}
public void beforeAdvice(JoinPoint joinPoint) {
System.out.println("beforeAdvice()");
}
public void afterAdvice() {
System.out.println("afterAdvice()");
}
public void afterThrowingAdvice() {
System.out.println("afterThrowingAdvice()");
}
public void afterReturningAdvice() {
System.out.println("afterReturningAdvice()");
}
@Around("pointcutMethod()")
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("pointcutMethod()")
public void beforeAdvice() {
System.out.println("beforeAdvice()");
}
}
}
- 코드 분석
@Aspect //AOP로 정의하는 클래스를 지정
@Pointcut //AOP 기능을 메서드, Annocation 등을 적용시킬 지점을 설정.
@Before //메서드 실행 이전
@After //정상적으로 메서드 실행 후
@AfterReturning //메서드 정상 종료될 시
@AfterThrowing //메서드에서 예외가 발생됐을 시
@Around //예외가 발생해도 Before + After 모두 제어
@Pointcut("execution(public void get*(..))") // public void인 모든 get메소드
@Pointcut("execution(* com.javalec.ex.*.*())") // com.javalec.ex 패키지에 파라미터가 없는 모든 메소드
@Pointcut("execution(* com.javalec.ex..*.*())") // com.javalec.ex 패키지 & com.javalec.ex 하위 패키지에 파라미터가 없는 모든 메소드
@Pointcut("execution(* com.javalec.ex.Worker.*())") // com.javalec.ex.Worker 안의 모든 메소드
@Pointcut("within(com.javalec.ex.*)") //com.javalec.ex 패키지 안에 있는 모든 메소드
@Pointcut("within(com.javalec.ex..*)") //com.javalec.ex 패키지 및 하위 패키지 안에 있는 모든 메소드
@Pointcut("within(com.javalec.ex.Worker)") //com.javalec.ex.Worker 모든 메소드
@Pointcut("bean(student)") //student 빈에만 적용
반응형
'네트워크' 카테고리의 다른 글
AOP - Advice 종류 (0) | 2022.10.27 |
---|---|
AOP (0) | 2022.10.27 |
MVC 디자인 패턴 (0) | 2022.10.13 |