ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JoinPoint
    SPRING 2021. 5. 26. 10:32

    개인 공부 후 정리 목적의 글입니다.

     

     

     

     

     

    횡단 관심에 해당하는 어드바이스 메소드를 의미있게 구현하려면 클라이언트가 호출한 비즈니스 메소드의 정보가 필요하다. 스프링에서는 이런 다양한 정보들을 이용할 수 있도록 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 객체를 이용하면, 호출되는 메소드에 대한 다양한 정보를 얻을 수 있다.

    메소드명  설명
    String getName() 클라이언트가 호출한 메소드 이름 리턴
    String toLongString() 클라이언트가 호출한 메소드의 리턴타입, 이름, 매개변수를 패키지 경로까지 포함하여 리턴
    String toShortString() 클라이언트가 호출한 메소드 시그니처를 축약한 문자열로 리턴

     

    JoinPoint는 어드바이스의 종류에 따라 사용 방법이 다소 다르다.

    JoinPoint 객체를 사용하려면 단지 JoinPoint를 어드바이스 메소드 매개변수로 선어만 하면 된다.

    그러면 클라이언트가 비즈니스 메소드를 호출할 때, 스프링 컨테이너가 JoinPoint 객체를 생성한다.

    그리고 메소드 호출과 관련된 모든 정보를 JoinPoint 객체에 저장하여 어드바이스 메소드를 호출할 때 인자로 넘겨준다.

     

     

    Before 어드바이스

    비즈니스 메소드가 실행되기 전에 동작할 로직을 구현한다.

    즉, 호출된 메소드 시그니처만 알 수 있다면 다양한 사전 처리 로직을 구현할 수 있다.

    이때 Before 어드바이스 메소드의 매개변수로 JoinPoint를 선언한다.

     

    After Returning 어드바이스

    비즈니스 메소드가 수행되고 난 이후 결과 데이터를 리턴할 때 동작하는 어드바이스이다.

    즉, 어떤 메소드가 어떤 값을 리턴했는지를 알아야 사후 처리 기능을 구현할 수 있다.

     

    After Throwing 어드바이스

    비즈니스 메소드가 수행되다가 예외가 발생할 때 동작하는 어드바이스이다.

    즉, 어떤 메소드에서 어떤 예외가 발생했는지를 알아야 발행한 예외의 종류에 다라 정확한 예외 처리를 구현할 수 있다.

     

    Around 어드바이스

    다른 어드바이스와는 다르게 반드시 ProceedingJoinPoint 객체를 매개변수로 받아야한다.

    ProceedingJoinPoint 객체는 비즈니스 메소드를 호출하는 proceed() 메소드를 가지고 있으며 JoinPoint를 상속했다.

     

    'SPRING' 카테고리의 다른 글

    어노테이션 기반 AOP  (1) 2021.05.26
    어드바이스 동작 시점  (0) 2021.05.25
    AOP 용어  (0) 2021.05.25
    어노테이션  (0) 2021.05.24
    의존성 주입  (2) 2021.05.21
Designed by Tistory.