본문 바로가기
Spring/스프링 퀵 스타트

‘스프링 퀵 스타트’ 정리 3일차

by 유서담 2023. 7. 24.

어드바이스 동작 시점

: 어드바이스는 각 조인포인트에 삽입되어 동작한 횡단관심에 해당하는 공통기능.

동작시점은 각 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( ) 클라이언트가 호출한 메소드 시그니처를 축약한 문자열로 리턴