-
스프링 퀵 스타트 03Spring&SpringBoot 2025. 9. 18. 15:35
2.2. AOP 엘리먼트
CLASS03. 어드바이스 동작 시점
- before : 비즈니스 메서드 실행 전 동작
- after returning : 비즈니스 메서드가 성공적으로 리턴되면 동작
- after throwing : 비즈니스 메서드가 실행 중 예외 발생하면 동작
- after : 비즈니스 메서드가 실행된 후, 무조건 실행
- around : 메서드 호출 자체를 가로채 비즈니스 메서드 실행 전후에 처리할 로직 삽입
- 어드바이스 동작 시점은 <aop:aspect> 엘리먼트 하위에 <aop:before>와 같이 지정한다
CLASS04. joinpoint와 바인드 변수
5.1. 어노테이션 기반 AOP 설정
5.1.1. 어노테이션 사용을 위한 스프링 설정
- 스프링 설정 파일에 <aop:aspectj-autoproxy> 엘리먼트 선언
- 어드바이스 클래스에 AOP 관련 어노테이션 설정
5.1.2. 포인트 컷 설정
- <aop:pointcut> > @Pointcut("execution(* com.springbook.biz..*Impl.*(..))")
5.1.3. 어드바이스 설정
- @Before("allPointcut()")
5.1.4. 에스팩트 설정
- 에스팩트는 포인트컷과 어드바이스의 결합이다 따라서 반드시 @Aspect가 설정된 에스팩트 객체에는 포인트컷과 어드바이스 결합하는 설정이 있어야 한다
@Service @Apspect // 포인트컷 + 어드바이스 public class LogAdvice { @Pointcut("execution(* com.springbook.biz..*Impl.*(..))") public void AllPointcut() { // 포인트컷 } @Before("allPointcut()") public void printLog() { // 어드바이스 System.out.println("[공통로그] 비즈니스 로직 수행 전 동작"); } }
- 어노테이션에 의해 위빙이 처리된다
5.2. 어드바이스 동작 시점
5.2.5. Around 어드바이스
- 어드바이스 메서드 중 around만 JoinPoint가 아닌 ProceedingJoinPoint 객체를 매개변수로 받는다
5.2.6. 외부 포인트컷 참조
어노테이션 설정으로 변경하고부터는 어드바이스 클래스마다 포인트컷 설정이 포함되면서 비슷하거나 같은 포인트컷이 반복 선언되는 문제가 발생한다
스프링은 이런 문제를 해결하기 위해 외부에 독립된 클래스에 따로 설정하도록 한다
@Apsect public class PointcutCommon { @Pointcut("execution(* com.springbook.biz..*Impl.*(..))") public void allPointcut() { } @Pointcut() public void getPointcut("execution(* com.springbook.biz..*Impl.get*(..))") { } }
@Service @Aspect public class BeforeAdvice { @Before("PointcutCommon.allPointcut()") public void beforeLog(JoinPointcut jp) { // 로직 } } @Service @Aspect public class AfterReturningAdvice { @AfterReturning(pointcut = "PointcutCommon.getPointcut()", returning="returnObj") public void afterLog(JoinPointcut jp, Object returnObj) { // 로직 } }
728x90'Spring&SpringBoot' 카테고리의 다른 글
스프링 퀵 스타트 02 (1) 2025.09.17 스프링 퀵 스타트 01 (0) 2025.09.16 [스프링MVC - 2편] 로그인 처리1 - 쿠키, 세션 (0) 2025.03.04 [스프링MVC - 2편] 검증 (4) (0) 2025.03.02 [스프링MVC - 2편] 검증 (3) (1) 2025.03.02