백엔드/Spring Framework

AOP(Aspect Oriented Programming) / 관점 지향 프로그래밍 / 동작 시점

maverick11471 2024. 7. 11. 20:05

2024.07.11 - [분류 전체보기] - AOP(Aspect Oriented Programming) / 관점 지향 프로그래밍

 

AOP(Aspect Oriented Programming) / 관점 지향 프로그래밍

[요약]1. 오늘 시행 할 부분 - FreeBoardServiceImpl 클래스 - LogConsole 클래스 - FreeBoardServiceRun 클래스 - root-context.xml aop 설정 2. 목적 - LogConsole 클래스를 FreeBoardServiceImpl 클래스에 계속 반복 주입해야

maverick11471.tistory.com

 

 

이전 글에서 AOP를 실행해야 하는 이유와 설정 방법, 실행에 대해 알아보았다.

 

이번에는 동작 시점에 대해 공부해 보겠다.

 

[요약]

1. 코드 작성 할 부분

 - After-Returning 클래스 생성 / root-context.xml 수정

 - After-thorwing 클래스 생성 / root-context.xml 수정

 - After 클래스 생성 / root-context.xml 수정

 - Around 클래스 생성 / root-context.xml 수정

 

 

1. After-Returning 클래스 생성

 * After-Returning 시점: 포인트컷 메소드가 정상적으로 종료 후 공통 기능 코드 시행

public class AfterReturning {
    public void afterReturningLog() {
        System.out.println("[로그] 로직 정상 종료 후에 실행");
    }
}

 

  가. root-context.xml 수정

 

  나. 결과 : 메서드 종료 후에 실행되는 것을 알 수 있다.

 

 


2. After-throwing 클래스 생성

 * after-throwing 시점: 포인트컷 메소드가 에러를 발생시켰을 때 공통 기능 코드를 실행

public class AfterThrowing {
    public void afterThrowingLog() {
        System.out.println("[로그] 로직 처리 중 예외 발생 시 실행");
    }
}

 

  가. root-context.xml 수정(방법은 위와 동일하다)

 

 

 나. FreeBoardServiceImpl 클래스에 일부러 오류값을 넣어줬다.

 

 

 다. 결과 : 예외가 발생하여 실행되었다.

 


3. after 클래스 생성

 * after 시점: 포인트컷 메소드가 에러거나 종료거나 상관없이 메소드가 종료되면 무조건 공통 기능 코드 실행

public class After {
    public void afterLog() {
        System.out.println("[로그] 로직 처리 중 예외가 발생하던 하지 않던 상관없이 로직이 종료되면 실행");
    }
}

 

  가. root-context.xml 수정(방법은 위와 동일하다)

 

 

 나. 결과

  - 오류가 있을 때

 - 오류가 없을 때

 

 


4. around 클래스 생성

 * around 시점: 포인트컷 메소드 실행 전 후로 한 번씩 공통 기능 코드 실행

 * around 시점은 JoinPoint를 활용하여 시행하는데, 이는 다음 게시물에 게시할테니 일단 넘어가자.

public class Around {
    public Object aroundLog(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("[로그] 로직 처리 전 실행");
        Object returnObj = proceedingJoinPoint.proceed();
        System.out.println("[로그] 로직 처리 후 실행");
        return returnObj;
    }
}

 

  가. root-context.xml 수정(방법은 위와 동일하다)

 

 

 나. 결과

 

 

이상 시행시점에 따른 AOP를 알아보았다.

 

정리해보면 AOP는 공통적인 사항을 계속 써주기 귀찮으니, AOP를 통해 실현될 수 있도록 만든 프로그래밍이다.

중요한 것은 시행시점에 따라 달라질 수 있다는 점을 알고 있으면 좋을 것 같다.