일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Intellij
- 자바스크립트 인라인
- 다른사람 프로젝트 수정전 가져야할 자세
- cmd
- 리눅스
- 시퀀스 조회
- 설정
- 룸북
- Java
- 비밀번호 변경 명령어
- linux
- 추천 사이트
- 추천 프로그램
- js
- 명령어
- 함수 인자값 id
- select
- JSON
- 순서 보장
- 타임리프와 스프링
- 개발시작전 자세
- it
- Test 룸북 사용하기
- 하모니카 OS 5
- BindingResult
- 스프링부트
- StringUtils.hasText
- #{..}
- 프로젝트 클린
- 타임리프
Archives
- Today
- Total
웹개발 블로그
[AOP] 어드바이스 종류 본문
어드바이스 종류
@Around : 메서드 호출 전/후에 수행, 조인 포인트 실행 여부 선택, 반환 값 변환, 예외 변환 등이 가능 (가장 강력한 어드바이스)
@Before : 조인 포인트 실행 이전에 실행
@After Retuning : 조인 포인트가 정상 완료 후 수행
@After Throwing : 메서드가 예외를 던지는 경우 수행
@After : 조인 포인트가 정상 또는 예외에 관계없이 실행(finally)
예시
package hello.aop.order.aop;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
@Slf4j
@Aspect
public class AspectV6Advice {
//@Around : 메서드 호출 전/후에 수행, 조인 포인트 실행 여부 선택, 반환 값 변환, 예외 변환 등이 가능 (가장 강력한 어드바이스)
@Around("hello.aop.order.aop.Pointcuts.orderAndService()")
public Object doTransaction(ProceedingJoinPoint joinPoint) throws Throwable {
try {
//@Before
log.info("[트랜잭션 시작] {}", joinPoint.getSignature());//타켓에 대한 정보, 조언되는 메서드에 대한 설명을 반환
Object result = joinPoint.proceed();//💥@Around는 개발자가 직접 타겟의 실행을 해줘야한다. / @Around에서만 proced()가 가능하다.
//@AfterReturning
log.info("[트랜잭션 커밋] {}", joinPoint.getSignature());
return result;
} catch (Exception e) {
//@AfterThrowing
log.info("[트랜잭션 롤백] {}", joinPoint.getSignature());
throw e;
} finally {
//@After
log.info("[리소스 릴리즈] {}", joinPoint.getSignature());
}
}
//@Before : 조인 포인트 실행 이전에 실행
@Before("hello.aop.order.aop.Pointcuts.orderAndService()")
public void doBefore(JoinPoint joinPoint) {
log.info("[before] {}", joinPoint.getSignature());
}
//@After Retuning : 조인 포인트가 정상 완료 후 수행
@AfterReturning(value = "hello.aop.order.aop.Pointcuts.orderAndService()", returning = "result")
public void doReturn(JoinPoint joinPoint, Object result) { //returning = "result"과 Objects result 명칭을 같게 해줘야 리턴값을 받아옴.
log.info("[return] {} return={}", joinPoint.getSignature(), result);
//💥주의! return result; (void)를 하지 않기에 반환값을 변경할 수 없음.
}
//@After Throwing : 메서드가 예외를 던지는 경우 수행
@AfterThrowing(value = "hello.aop.order.aop.Pointcuts.orderAndService()", throwing = "ex")
public void doThrowing(JoinPoint joinPoint, Exception ex) {
log.info("[ex] {} message={}", ex);
}
//@After : 조인 포인트가 정상 또는 예외에 관계없이 실행(finally)
@After(value = "hello.aop.order.aop.Pointcuts.orderAndService()")
public void doAfter(JoinPoint joinPoint) {
log.info("[after] {}", joinPoint.getSignature());
}
}
'◆ SPRING BOOT > AOP' 카테고리의 다른 글
[AOP] 💥💥포인트컷 지시자 - execution (0) | 2024.08.14 |
---|---|
[AOP] 💥(중요) 프록시는 여러개 생성되나? (0) | 2024.08.13 |
[AOP] 간단한 용어 정리 (0) | 2024.08.08 |
[Spring]스프링 AOP 용어 정리 (0) | 2024.05.04 |
[Spring boot] AOP 설정(build.gradle) (0) | 2023.07.17 |