AOP란?
관점 지향 프로그래밍
: 관점에 따라 필요한 것들을 수행하는 것으로 필요한 작업에 관점을 두고 그에 따른 다양한 대상을 선별하여 간섭하는 것
Advice 에 간섭할 내용을 실제로 구현할 코드를 작성한다.
@Aspect 라는 어노테이션을 사용하여 해당 클래스가 Aspect 를 구현한 것을 명시해준다.
@Aspect
public class TestAdvice {
@Before("excution(* org.test.service.TestService*.test(String, String)) && args(a, b)")
public void logBefore(String a, String b){
log.info("실행 전");
log.info("a : " + a);
log.info("b : " + b);
}
}
// Aspect 결과
실행 전
a : hi
b : hello
// test 메서드 결과
hi hello
excution : 접근제한자와 특정클래스의 메서드 지정 가능
@Aspect
public class TestAdvice {
@AfterThrowing(pointcut = "excution(* org.test.service.TestService*.*(..))", throwing="exception")
public void TestException(Exception exception){
log.info("exception : " + exception);
}
}
// 메서드 : Integer.parseInt(a) + Integer.parseInt(b)
a : hi
b : 111
// Aspect 결과
exception : java.lang.NumberFormatException: For input string: "hi"