어드바이스 동작 시점
: 어드바이스는 각 조인포인트에 삽입되어 동작한 횡단관심에 해당하는 공통기능.
동작시점은 각 AOP 기술마다 다르다
동작시점 설명
Before | 비즈니스 메소드 실행전 동작 |
After | After Returning : 비즈니스 메소드가 성공적으로 리턴되면 동작 After Throwing : 비즈니스 메소드 실행 중 예외가 발생하면 동작 ( 마치 Try ~ Catch 블럭에서 Catch 블럭에 해당 ) After : 비즈니스 메소드가 실행된 후 무조건 실행 ( Try ~ Catch ~ Finally 블록에서 Finally 블록에 해당 ) |
Around | Around는 메소드 호출 자체를 가로채 비즈니스 메소드 실행 전후에 처리할 로직을 삽입할 수 있다. |
이러한 어드바이스 동작시점은 < aop : aspect > 엘리먼트에 지정하여 사용
Before 어드바이스
: 포인트컷으로 지정된 메소드 호출시, 메소드가 실행되기 전에 처리될 내용들을 기술하기 위해 사용
After Returning 어드바이스
: 포인트컷으로 지정된 메소드가 정상적으로 실행되고 나서, 메소드 수행 결과로 생성된 데이터를 리턴하는 시점에 동작. 비즈니스 메소드 수행 결과로 생성된 데이터를 리턴하는 시점에 동작.
After Throwing 어드바이스
: 포인트컷으로 지정된 메소드가 실행되다가 예외가 발생하는 시점에 동작. 예외 처리 어드바이스를 설정할 때 사용. ( 예외가 발생하지 않으면 동작여부를 알 수 없다 )
After 어드바이스
: try ~ catch ~ finally 구문에서 finally 블록처럼 예외 발생 여부에 상관없이 무조건 수행되는 어드바이스를 등록할 때 사용
After 어드바이스는 예외 발생과 무관하게 무조건 실행.
Around 어드바이스
: 클라이언트의 메소드 호출을 가로채기 때문에 클라이언트가 호출한 비즈니스 메소드가 실행되기 전에 사전 처리 로직을 수행할 수 있고, 비즈니스 메소드가 실행되고 나서 사후 처리 로직도 수행할 수 있다.
JoinPoint와 바인드 변수
JoinPoint 메소드
메소드 설명
Signature getSignature ( ) | 클라이언트가 호출한 메소드의 시그니처 ( 리턴타입, 이름, 매개변수 ) 정보가 저장된 Signature 객체 리턴 |
Object getTarget ( ) | 클라이언트가 호출한 비즈니스 메소드를 포함하는 비즈니스 객체 리턴 |
Object[ ] getArgs ( ) | 클라이언트가 메소드를 호출할 때 넘겨준 인자 목록을 Object 배열로 리턴 |
Around 어드바이스 메소드를 구현할 때 사용한 ProceedingJoinPoint 인터페이스는 JoinPoint를 상속.
따라서 JoinPoint가 가진 모든 메소드를 지원하며, proceed( ) 메소드를 추가한 것
주의할 점 : Before, After Returning , After Throwing, After 어드바이스에서는 JoinPoint를 사용해야 하고,
유일하게 Around 어드바이스에서만 ProceedingJoinPoint를 매개변수로 사용해야 한다.
Around 어드바이스에서만 proceed ( ) 메소드가 필요하기 때문.
getSignature( ) 메소드가 리턴하는 Signature 객체를 이용하면, 호출되는 메소드에 대한 다양한 정보를 얻을 수 있다
Signature 가 제공하는 메소드들
메소드명 설명
String getName( ) | 클라이언트가 호출한 메소드 이름 리턴 |
String toLongString( ) | 클라이언트가 호출한 메소드의 리턴 타입, 이름, 매개변수를 패키지 경로까지 포함하여 리턴 |
String toShortString( ) | 클라이언트가 호출한 메소드 시그니처를 축약한 문자열로 리턴 |
'Spring > 스프링 퀵 스타트' 카테고리의 다른 글
‘스프링 퀵 스타트’ 정리 2일차 (0) | 2023.07.23 |
---|---|
‘스프링 퀵 스타트’ 정리 1일차 (0) | 2023.07.21 |