springboot 의 JoinPoint 의 getSignature 방법 에 대해 말씀 드 리 겠 습 니 다.

JoinPoint 의 getSignature 방법
springboot 을 사용 하여 op 을 쓸 때 JoinPoint 클래스 가 있 습 니 다.프 록 시 클래스 와 피 프 록 시 클래스 의 정 보 를 얻 을 수 있 습 니 다.
이 글 은 JoinPoint 의 getSignature 방법 이 어떤 형식 으로 되 돌아 오 는 지 기록 합 니 다.
잔말 말고 코드 붙 여.

package org.aspectj.lang; 
public interface Signature {
    String toString(); 
    String toShortString(); 
    String toLongString(); 
    String getName(); 
    int getModifiers(); 
    Class getDeclaringType(); 
    String getDeclaringTypeName();
}
출력 을 출력 합 니 다.getString 은 테스트 클래스 의 방법 명 이 고 TestController 는 클래스 이름 입 니 다.

joinPoint.getSignature().toString():String com.fast.web.controller.TestController.getString()
joinPoint.getSignature().toShortString():TestController.getString()
joinPoint.getSignature().toLongString():public java.lang.String com.fast.web.controller.TestController.getString()
joinPoint.getSignature().getName():getString
joinPoint.getSignature().getModifiers():1
joinPoint.getSignature().getDeclaringType():class com.fast.web.controller.TestController
joinPoint.getSignature().getDeclaringTypeName():com.fast.web.controller.TestController
콜론 앞 은 사용 하 는 방법 이 고 뒤 는 이번 테스트 출력 결과 입 니 다.
테스트 된 클래스 첨부:

package com.fast.web.controller;
import com.fast.framework.dao.TestDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; 
@RestController
public class TestController {
 
    @Autowired
    private TestDao testDao;
 
    @RequestMapping("/test")
    public String getString() {
        int i = testDao.selectBase();
        return String.valueOf(i);
    }
}
springboot 주해 식 AOP 는 JoinPoint 를 통 해 인 자 를 가 져 옵 니 다.
이전 개발 시 절 점 주해 의 매개 변수 값 을 가 져 와 기록 해 야 합 니 다.
절단면 주석:
@Aspect C 표 지 는 용기 에서 읽 을 수 있 는 절단면 으로 클래스 에 작용 합 니 다.
@Pointcut C(접점):알림 이 있 는 연결 점 입 니 다.
@Before C 전치
@AfterThrowing C 이상 던 지기
@After C 백업
@AfterReturning C 후 강화,실행 순 서 는@After 이후 입 니 다.
@Around C 서 라운드
1.관련 maven 가방

 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-aop</artifactId>
 </dependency>
2.인터페이스 사용자 정의

import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Action {
    String value() default "list";
}
3.단면 류 정의

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@Aspect
@Component
public class ActAspect {
 
 @AfterReturning("@annotation(  .Action)")
    public void afterReturning(JoinPoint point){
    
  //         
  String methodName = point.getSignature().getName();
  
     //          
        MethodSignature methodSignature = (MethodSignature)point.getSignature();
        Method method = methodSignature.getMethod();
        //     Action 
        Action annotation = method.getAnnotation(Action.class);
        //     Action value    
        String value = annotation.value();
        
        //           
        Object[] objArray = point.getArgs();
        //                 
        List<String> list = new ArrayList<>();
        for (Object obj: objArray) {
            if(obj instanceof Collection){
                list = (List<String>) obj;
            }
        }
    }    
}
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기