코딩항해기

[Spring] AOP @Order 실행 우선 순위 설정 본문

Spring

[Spring] AOP @Order 실행 우선 순위 설정

miniBcake 2024. 10. 20. 22:19

 

@Order

동일한 조인포인트에 여러 개의 Advice가 지정된 경우, 여러 개의 AOP가 같은 시점에 동작하게 되는 중첩 AOP상태가 된다. 특히 Spring framework에서 정의한 AOP가 사용될 때 자연스럽게 중접 AOP가 되는 경우가 많이 있는데, 이 때 먼저 실행해야하는 AOP가 있다면 @Order를 통해 우선 순위를 지정할 수 있다.

 

Spring에서 자주 사용하는 @Transectional 어노테이션을 사용하는경우 Transaction Advisor 다음에 다른 Advisor가 위치하면 해당 Advisor 또한 트랜잭션에 포함되므로 수행되는 시점은 굉장히 중요하다.

 

또한 경우에 따라 순서가 뒤섞이며 의존성 관련한 문제가 생길 수도 있다.

 

 

문법

위치는 중첩되는 Advice 메서드 위에 위치한다. (Before, After 등과 함께 위치)

알파벳 소문자 n 위치에는 정수가 들어가는데, 숫자가 낮을 수록 우선 순위가 높게 설정된다.

@Order(n)

 

 

생략

Order를 지정하지 않을 경우 내부적으로 순서를 판단해 동작한다. 만약 한 개의 Advisor만 먼저 실행되고 나중에는 순서가 상관없다면 그 한 개의 Advisor에만 Order를 통해 우선 순위를 부여하면 된다. 그러나 설계대로 AOP를 수행하기 위해서는 순서 또한 중요한 설정 요소임을 잊으면 안된다.