AOP(Aspect Oriented Programming) / 관점 지향 프로그래밍 / 동작 시점
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를 통해 실현될 수 있도록 만든 프로그래밍이다.
중요한 것은 시행시점에 따라 달라질 수 있다는 점을 알고 있으면 좋을 것 같다.