Spring Boot 의 우아 함 사용 AOP

21415 단어 SpringAll
본문 제목: Spring Boot 의 우아 한 사용 AOP
원본 링크:http://www.shuibo.cn/143.html
허가 협의: 서명 - 비상 업적 사용 - 연역 금지 4.0 국제 전재 원문 링크 및 작성 자 를 보류 하 십시오.
AOP 가 무엇 인지 약술 하 다.
AOP 는 Aspect Oriented Programming 의 줄 임 말로 절단면 프로 그래 밍 을 위 한 사전 컴 파일 방식 과 실행 시 동적 프 록 시 를 통 해 프로그램 기능 을 통합 적 으로 유지 하 는 기술 을 의미한다.AOP 를 이용 하면 업무 논 리 를 분리 하고 결합 도 를 낮 추 며 중용 성 을 높이 고 개발 효율 을 높 일 수 있다.
주요 용도
  • 로그 기록
  • 사무 처리
  • 이상 처리
  • 안전 처리
  • 성능 통 계 · ·
  • Spring Boot 에서 AOP 기록 인터페이스 접근 기록 사용 하기
    1. 의존 도 추가
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    

    2. 절단면 클래스 작성
    @Aspect // @Aspect     
    @Component  // @Component       IOC   
    public class ShuiBoAspect {
    
        private static final Logger logger = LoggerFactory.getLogger(ShuiBoAspect.class);
    
        public static long startTime;
        public static long endTime;
    
        /**
         * execution(public * cn.shuibo.controller.*.*(..))
         *   cn.shuibo.controller          , "..."              
         */
        @Pointcut("execution(public * cn.shuibo.controller.*.*(..))")
        public void shuiboPointcutLog(){
    
        }
        @Before("shuiboPointcutLog()")
        public void before(JoinPoint joinPoint) {
            startTime = System.currentTimeMillis();
            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            MethodSignature signature = (MethodSignature) joinPoint.getSignature();
            HttpServletRequest request = requestAttributes.getRequest();
            Method method = signature.getMethod();
            String requestURI = request.getRequestURI();
            logger.info("  URL:" + requestURI);
            String requestMethod = request.getMethod();
            logger.info("    :" + requestMethod);
            Object[] args = joinPoint.getArgs();
            LocalVariableTableParameterNameDiscoverer u = new LocalVariableTableParameterNameDiscoverer();
            String[] paramNames = u.getParameterNames(method);
            if (args != null && paramNames != null) {
                String params = "";
                for (int i = 0; i < args.length; i++) {
                    params += "  " + paramNames[i] + "=" + args[i];
                }
                logger.info("  :" + params);
            }
            String remoteAddr = request.getRemoteAddr();
            logger.info("IP:" + remoteAddr);
            String declaringTypeName = joinPoint.getSignature().getDeclaringTypeName();
            logger.info("  :" + declaringTypeName);
            String methodName = joinPoint.getSignature().getName();
            logger.info("   :" + methodName);
        }
    
        @After("shuiboPointcutLog()")
        public void after() {
            endTime = System.currentTimeMillis() - startTime;
        }
    
        @AfterReturning(pointcut = "shuiboPointcutLog()", returning = "object")
        public void getAfterReturn(Object object) {
            logger.info("    :{}ms", endTime);
        }
    }
    

    3. 테스트 클래스 작성
    @RestController
    public class TestController {
    
        @GetMapping(value = "/index")
        public String index(String text){
            String shuibo = "shuibo.cn";
            if(shuibo.equals(text)){
                shuibo = "https://shuibo.cn";
            }else{
                shuibo = "http://shuibo.cn";
            }
            return shuibo;
        }
    }
    

    4. 실행 결과 (콘 솔)
     INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect:   URL:http://localhost:8080/index
     INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect:     :GET
     INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect:   : text=1
     INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect: IP:0:0:0:0:0:0:0:1
     INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect:   :cn.shuibo.controller.TestController
     INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect:    :index
     INFO 10216 --- [nio-8080-exec-1] cn.shuibo.aspect.ShuiBoAspect:     :4ms
    

    총결산
    이상 의 실천 을 통 해 우 리 는 Spring Aop 절단면 프로 그래 밍 기록 방문 기록 을 어떻게 사용 하 는 지 알 고 배 웠 다.본문 GitHub 주소:https://github.com/ishuibo/SpringAll

    좋은 웹페이지 즐겨찾기