SpringBoot 에서 절 점 을 찾 는 두 가지 상용 방법

가끔 은 AOP 를 사용 하여 강 화 를 진행 합 니 다.절단면 류 를 작성 할 때 어느 방법 으로 이 절단면 을 사용 하여 강 화 를 시도 해 야 합 니까?이 글 은 주로 SpringBoot 에서 접점 을 찾 는 두 가지 방법 을 설명 합 니 다.하 나 는 execution 표현 식 을 사용 하 는 방법 이 고 하 나 는 사용자 정의 주 해 를 이용 하 는 방법 입 니 다.
다음은 이 두 가지 방법의 사용 방식 을 간단 한 예 로 설명 한다.
<==========방법 집행 전=============>
method();
<==========방법 집행 후=============>
실행 식
execution 표현 식 의 방식 은 주로 절 점 을 정의 할 때 표현 식 을 통 해 강화 해 야 할 방법 을 선택 하 는 것 입 니 다.
실행 식 해석

execution(<     >?<      ><     >(<    >)<    >?)
유형
해독
반드시
예시
<수정자 모드>
선택 한 수정자 형식 표시
아니.
public/private/...
<형식 모드 로 돌아 가기>
선택 한 반환 값 형식 표시
예.
void/int/...
<방법 명 모드>
가방
예.
com.luke.service/com.luke.controller.*/...
(<매개 변수 모드>)
선택 한 방법의 매개 변 수 를 표시 합 니 다.
예.
*(..)/*(String name)/*(int size, ..)/...
<이상 모드>
선택 한 방법의 이상 유형 을 표시 합 니 다.
아니.
throws Exception/...

 //            
execution(* com.luke.service.*(..))

//          public  
execution(public * UserService.*(..))

//          public  ,      int     
execution(public int com.luke.service.*(..))

//          public  ,        String,    int     
execution(public int com.luke.service.*(String name, ..))

사용자 정의 절단면 클래스:

@Aspect
@Component
public class LogAspect {

    @Pointcut("execution(* com.luke.springdata.controller.*.*(..))")
    public void operationLog(){}

    /**
     *        Around      
     */
    @Around("operationLog()")
    public Object doAround(ProceedingJoinPoint joinPoint) {
        Object proceed = null;
        try {
            System.out.println("     ");
            proceed = joinPoint.proceed();
            System.out.println("     ");
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return proceed;
    }
}
이 절 점 의 execution 표현 식 은 com.luke.springdata.controller 패키지 의 모든 방법 입 니 다.
**@Around**주 해 를 사용 하여 증강 방법 을 표시 하고 절 점 을 지정 합 니 다.
테스트 용 컨트롤 러 클래스

@RestController
@RequestMapping("/person")
public class PersonController {

    @GetMapping("/test")
    public void test(){
        System.out.println("     ");
    }
    
}
항목 을 실행 하고 이 방법 을 호출 하여 결 과 를 봅 니 다.
방법 실행 전
방법 이 집행 되 었 다
방법 실행 후
사용자 정의 주석 방법
사용자 정의 주 해 는 강화 가 필요 한 방법 에 사용자 정의 주 해 를 추가 하면 된다.
사용자 정의 주석 클래스:

@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Log{
    
}
주석 Log 를 사용자 정의 하 였 습 니 다.이 주 해 는 방법 에 만 추가 할 수 있 습 니 다.
사용자 정의 절단면 클래스:

@Aspect
@Component
public class LogAspect {

    @Pointcut("@annotation(com.luke.springdata.annotation.Log)")
    public void operationLog(){}

    /**
     *        Around      
     */
    @Around("operationLog()")
    public Object doAround(ProceedingJoinPoint joinPoint) {
        Object proceed = null;
        try {
            System.out.println("     ");
            proceed = joinPoint.proceed();
            System.out.println("     ");
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        return proceed;
    }
}

여기에 작 성 된 사용자 정의 절단면 클래스 는**@Pointcut 주해 로 절단면 을 정의 합 니 다.또한 이번 에는@annotation(xxx)**방식 으로 xxx 주 해 를 추가 한 방법 이 있 으 면 이 절단면 을 사용 하여 강화 하 는 것 을 보 여 줍 니 다.
또한 모든 증강 방법 에 이 절단면 을 사용 한 다음 에 정상 적 인 방법 으로 논 리 를 강화 하면 됩 니 다.
테스트 용 컨트롤 러 클래스

@RestController
@RequestMapping("/person")
public class PersonController {

    @Log
    @GetMapping("/test")
    public void test(){
        System.out.println("     ");
    }
    
}

이때 절단면 을 사용 해 야 하 는 방법 에**@Log**주 해 를 넣 고 이 방법 을 호출 하여 효 과 를 봅 니 다.
방법 실행 전
방법 이 집행 되 었 다
방법 실행 후
총결산
두 가지 방식 모두 AOP 의 기능 을 실현 할 수 있 습 니 다.사용 에 있어 서 어떤 가방 아래 의 모든 방법 이 이 절단면 을 강화 해 야 한다 면 execution 표현 식 을 사용 하 는 것 이 더욱 편리 합 니 다.그러나 일부 방법 만 필요 하고 서로 다른 유형 에 분포 하면 주해 방식 이 더욱 유연 하 다.
SpringBoot 에서 포 지 셔 닝 접점 을 찾 는 데 자주 사용 되 는 두 가지 방법 에 관 한 글 을 소개 합 니 다.더 많은 SpringBoot 포 지 셔 닝 접점 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기