1. 스프링 설정 파일: aop:aspectj-autoproxy 엘리먼트를 선언
2. 어드바이스 클래스(2가지 방법)
<bean> 등록
3. 포인터 컷 설정 : @Poincut
@Pointcut("execution(* org.kh.member.model.service..Service.(..))")
public void allPointcut(){}
4. Advice 설정: 시점에 따라 어노테이션 적용
- @Before: 비즈니스 메소드 실행 전에 동작
- @AfterReturning : 비즈니스 메소드가 성공적으로 리턴되면 동작
- @AfterThrowing : 비즈니스 메소드 실행 중 예외가 발생하면 동작
- @After : 비즈니스 메소드가 실행된 후, 무조건 동작
- @Around : 호출 자체를 가로채 비즈니스 메소드 실행 전후에 처리할 로직을 삽입
@Aspect
@Component
public class AroundAdvice {
@Pointcut("execution(* kr.or.iei.member.model.service.*Impl.*(..))")
public void allPointCut() {}
@Around("allPointCut()")
public Member aroundLog(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("[aroundLog] 메소드 호출 '전'에 동작하는 로그");
Member returnObj = (Member)pjp.proceed(); // proceed 메소드를 바탕으로 전화 후를 구분
System.out.println("[aroundLog] 메소드 호출 '후'에 동작하는 로그");
System.out.println(returnObj.getUserName()+" 님이 로그인을 하였습니다.");
return returnObj;
}
}