>  기사  >  Java  >  Spring 구성 간단한 로그 주석

Spring 구성 간단한 로그 주석

巴扎黑
巴扎黑원래의
2017-07-20 10:32:101523검색

Java는 jdk1.5에서 주석을 도입했으며, Spring 프레임워크도 Java 주석을 최대한 활용합니다.

다음은 Spring 프레임워크의 AOP(관점 지향 프로그래밍) 관련 개념을 포함하는 Spring의 간단한 사용자 정의 주석 프로세스를 설명합니다.
Java 주석에 대해 모르는 경우 먼저 Java 사용자 정의 주석을 이해할 수 있습니다. Java 사용자 정의 주석

1. 사용자 정의 주석 만들기

requestUrl은 우리가 맞춤화한 매개변수

package com.sam.annotation;

import java.lang.annotation.*;

/**
 * @author sam
 * @since 2017/7/13
 */

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyLog {

    String requestUrl();

}

2입니다. 여기에서 주석을 구문 분석하세요. Spring의 AOP(Aspect Oriented 프로그래밍) 기능

@Aspect 주석을 통해 이 클래스를 관점 클래스로 만듭니다

@Pointcut을 통해 진입점을 지정합니다. 여기에 지정된 진입점은 @에 의해 수정된 메서드인 MyLog 주석 유형입니다. MyLog 주석을 입력하려면 이 진입점을 입력하세요.
    @Before 사전 알림: 특정 연결 지점 이전에 실행되는 알림이지만 이 알림은 연결 지점 이전의 실행 프로세스를 막을 수 없습니다(예외가 발생하지 않는 한).
  • @Around 알림: 메서드 실행 전후에 구현할 수 있습니다. 메서드 내에서 point.proceed()를 실행하고 결과를 반환해야 합니다.
  • @AfterReturning 사후 알림: 연결 지점이 정상적으로 완료된 후 실행되는 알림입니다. 예를 들어 메서드는 예외를 발생시키지 않고 정상적으로 반환합니다.
  • @AfterThrowing 예외 알림: 메서드가 예외를 발생시키고 종료될 때 실행되는 알림입니다.
  • @After Post 알림: 연결 지점이 정상적으로 완료된 후 실행되는 알림입니다. 예를 들어 메서드는 예외를 발생시키지 않고 정상적으로 반환합니다.
  • package com.sam.annotation;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;
    import org.aspectj.lang.reflect.MethodSignature;
    import org.springframework.stereotype.Component;
    
    import java.lang.reflect.Method;
    
    /**
     * @author sam
     * @since 2017/7/13
     */
    @Aspect //AOP 切面
    @Component
    public class MyLogAspect {
    
    
        //切入点
        @Pointcut(value = "@annotation(com.sam.annotation.MyLog)")
        private void pointcut() {
    
        }
    
    
        /**
         * 在方法执行前后
         *
         * @param point
         * @param myLog
         * @return
         */
        @Around(value = "pointcut() && @annotation(myLog)")
        public Object around(ProceedingJoinPoint point, MyLog myLog) {
    
            System.out.println("++++执行了around方法++++");
    
            String requestUrl = myLog.requestUrl();
    
            //拦截的类名
            Class clazz = point.getTarget().getClass();
            //拦截的方法
            Method method = ((MethodSignature) point.getSignature()).getMethod();
    
            System.out.println("执行了 类:" + clazz + " 方法:" + method + " 自定义请求地址:" + requestUrl);
    
            try {
                return point.proceed(); //执行程序
            } catch (Throwable throwable) {
                throwable.printStackTrace();
                return throwable.getMessage();
            }
        }
    
        /**
         * 方法执行后
         *
         * @param joinPoint
         * @param myLog
         * @param result
         * @return
         */
        @AfterReturning(value = "pointcut() && @annotation(myLog)", returning = "result")
        public Object afterReturning(JoinPoint joinPoint, MyLog myLog, Object result) {
    
            System.out.println("++++执行了afterReturning方法++++");
    
            System.out.println("执行结果:" + result);
    
            return result;
        }
    
        /**
         * 方法执行后 并抛出异常
         *
         * @param joinPoint
         * @param myLog
         * @param ex
         */
        @AfterThrowing(value = "pointcut() && @annotation(myLog)", throwing = "ex")
        public void afterThrowing(JoinPoint joinPoint, MyLog myLog, Exception ex) {
            System.out.println("++++执行了afterThrowing方法++++");
            System.out.println("请求:" + myLog.requestUrl() + " 出现异常");
        }
    
    }
  • 3. 사용자 정의 주석 사용

컨트롤러에서 직접 @MyLog

package com.sam.controller;

import com.sam.annotation.MyLog;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author sam
 * @since 2017/7/13
 */
@RestController
@RequestMapping(value = "/index")
public class IndexController {

    @MyLog(requestUrl = "/index请求")
    @RequestMapping(method = RequestMethod.GET)
    public String index() {
        return "index";
    }
}

주석을 사용하여 프로젝트를 시작하고, http://localhost:8080/index

를 방문하세요. 결과

++++执行了around方法++++
执行了 类:class com.yfs.controller.IndexController 方法:public java.lang.String com.yfs.controller.IndexController.index() 自定义请求地址:/index请求
++++执行了afterReturning方法++++
执行结果:index

위에 설명되어 있습니다. self의 Spring 구현 - 주석을 정의하는 간단한 프로세스에는 더 많은 사용자 정의 작업이 필요하며 관점 클래스에서 프로그래밍해야 합니다.

위 내용은 Spring 구성 간단한 로그 주석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.