Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- pointcut
- http
- Greedy
- spring
- kotlin
- 스프링 핵심 원리
- 김영한
- SpringBoot
- Thymeleaf
- 스프링 핵심 기능
- JDBC
- 백준
- 스프링
- java
- 알고리즘
- Android
- 자바
- QueryDSL
- transaction
- 그리디
- Proxy
- jpa
- AOP
- db
- Servlet
- Spring Boot
- Exception
- 인프런
- springdatajpa
- JPQL
Archives
- Today
- Total
개발자되기 프로젝트
[스프링AOP] 스프링AOP 구현 - pointcut 분리 본문
- @Around 에 포인트컷 표현식을 직접 넣을 수 도 있지만,
- @Pointcut 애노테이션을 사용해서 별도로 분리할 수 도 있다.
1. AspectV2
@Slf4j
@Aspect
public class AspectV2 {
//hello.aop.order 패키지와 하위 패키지
@Pointcut("execution(* hello.aop.order..*(..))")
private void allOrder(){ } // pointcut signature
@Around("allOrder()")
public Object doLog(ProceedingJoinPoint joinPoint) throws Throwable{
log.info("[[log] {}", joinPoint.getSignature());
return joinPoint.proceed(); //target호출
}
}
2. @Pointcut
- @Pointcut 에 포인트컷 표현식을 사용한다.
- 메서드 이름과 파라미터를 합쳐서 포인트컷 시그니처(signature)라 한다.
- 메서드의 반환 타입은 void 여야 한다.
- 코드 내용은 비워둔다.
- 포인트컷 시그니처는 allOrder() 이다.
- 이름 그대로 주문과 관련된 모든 기능을 대상으로 하는 포인트컷이다.
- @Around 어드바이스에서는 포인트컷을 직접 지정해도 되지만, 포인트컷 시그니처를 사용해도 된다.
여기서는 @Around("allOrder()") 를 사용한다. - private , public 같은 접근 제어자는 내부에서만 사용하면 private 을 사용해도 되지만,
다른 애스팩트에서 참고하려면 public 을 사용해야 한다.
- 결과적으로 AspectV1 과 같은 기능을 수행한다. 이렇게 분리하면 하나의 포인트컷 표현식을 여러
어드바이스에서 함께 사용할 수 있다. - 그리고 뒤에 설명하겠지만 다른 클래스에 있는 외부 어드바이스에서도 포인트컷을 함께 사용할 수 있다.
3. GitHub: 220105 @Pointcut
'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글
[스프링AOP] 스프링AOP 구현 - Pointcut 참조 (0) | 2022.01.05 |
---|---|
[스프링AOP] 스프링AOP 구현 - 여러 Advice (0) | 2022.01.05 |
[스프링AOP] 스프링AOP 구현 (0) | 2022.01.05 |
[스프링AOP] 예제 프로젝트 (0) | 2022.01.05 |
[스프링AOP] 프로젝트 생성 (0) | 2022.01.05 |
Comments