티스토리 뷰
728x90
0. 이 포스트는 Spring : AOP with Java Config의 연속이다.
1. @After advice는 타겟 메소드에서 Exception의 발생여부과 관계없이 실행된다.
1-1 실행시점은 @AfterReturning 이나 @AfterThrowing advice가 실행되기 직전에 실행된다.
1-2 @After advice는 에러에 대한 접근이 불가능하다.
1-2-1 예외 관련 처리가 필요하면 @AfterThrowing을 추가로 구현해야 한다.
2. 사용 용도는
2-1 예외 로그를 남기거나 감사를 업무수행
2-2 결과 관계없이 처리해야 하는 리소스 해제 같은 로직 수행
3. @After는 @AfterReturning, @AfterThrowing과 같이 실행해야 동작을 확인할 수 있어 추가된 부분만 붙여넣기 한다.
@Aspect
@Component
public class LoggingAspect {
@AfterThrowing(pointcut = "execution(* pe.pilseong.aop_after_returning.dao.AccountDAO.findAccounts(..))", throwing = "ex")
public void afterThrowingFindAccountsAdvice(JoinPoint joinPoint, Throwable ex) {
System.out.println("Aspect(@AfterThrowing) :: afterThrowingFindAccountsAdvice is executed after "
+ joinPoint.getSignature().toShortString());
}
@AfterReturning(pointcut = "execution(* pe.pilseong.aop_after_returning.dao.AccountDAO.findAccounts(..))")
public void afterReturningFindAccountsAdvice(JoinPoint joinPoint) {
System.out.println("Aspect(@AfterReturning) :: afterReturningFindAccountsAdvice is executed after "
+ joinPoint.getSignature().toShortString());
}
@After(value = "execution(* pe.pilseong.aop_after_returning.dao.AccountDAO.findAccounts(..))")
public void afterFindAccountsAdvice(JoinPoint joinPoint) {
System.out.println("Aspect(@After) :: afterReturningFindAccountsAdvice is executed after "
+ joinPoint.getSignature().toShortString());
}
4. 실행 결과
4-1 결과를 보면 예외의 발생 여부와 상관없이 @After advice가 실행된 것을 확인 할 수 있다.
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
AccountDAO accountDAO = context.getBean("accountDAO", AccountDAO.class);
List<Account> accounts = null;
try {
boolean triggerError = true;
accounts = accountDAO.findAccounts(triggerError);
} catch (Exception e) {
System.out.println("Main App class :: " + e.getMessage());
}
System.out.println("\nMain App class :: ");
System.out.println("Main App class Accounts List :: " + accounts);
context.close();
}
}
// triggerError가 true로 예외를 발생시킨 경우
findAccounts is executed
Aspect(@After) :: afterReturningFindAccountsAdvice is executed after AccountDAO.findAccounts(..)
Aspect(@AfterThrowing) :: afterThrowingFindAccountsAdvice is executed after AccountDAO.findAccounts(..)
Main App class :: Exception :: To trigger @AfterThrowing
Main App class ::
Main App class Accounts List :: null
---------------------------------------------------------------------------
// triggerError가 false인 정상 경로 실행의 경우
findAccounts is executed
Aspect(@After) :: afterReturningFindAccountsAdvice is executed after AccountDAO.findAccounts(..)
Aspect(@AfterReturning) :: afterReturningFindAccountsAdvice is executed after AccountDAO.findAccounts(..)
Main App class ::
Main App class Accounts List :: [Account [name=Pilseong, level=Admin], Account [name=Suel, level=Admin], Account [name=Noel, level=Staff]]
728x90
'Spring > Spring AOP' 카테고리의 다른 글
Spring : AOP with Java Config - @Around (0) | 2020.05.14 |
---|---|
Spring : AOP with Java Config - @AfterThrowing (0) | 2020.05.13 |
Spring : AOP with Java Config - @AfterReturning return data 수정 (0) | 2020.05.13 |
Spring : AOP with Java Config - @AfterRetuning advice (0) | 2020.05.13 |
Spring : AOP with Java Config - Method Parameter 접근 (0) | 2020.05.13 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
TAG
- 설정
- login
- Validation
- Spring Security
- 로그인
- Many-To-Many
- 스프링부트
- one-to-many
- Angular
- MYSQL
- crud
- 설정하기
- 하이버네이트
- hibernate
- jsp
- form
- 자바
- 스프링
- one-to-one
- Rest
- RestTemplate
- Security
- 매핑
- 외부파일
- spring boot
- Spring
- WebMvc
- 상속
- mapping
- XML
250x250