Heim > Java > javaLernprogramm > Hauptteil

Einfache Protokollanmerkung zur Federkonfiguration

巴扎黑
Freigeben: 2017-07-20 10:32:10
Original
1527 Leute haben es durchsucht

Java hat in jdk1.5 Annotationen eingeführt, und das Spring Framework nutzt auch Java-Annotationen in vollem Umfang.

Im Folgenden wird der einfache Prozess benutzerdefinierter Anmerkungen in Spring erläutert, der AOP-bezogene Konzepte (Aspektorientierte Programmierung) im Spring-Framework umfasst.
Wenn Sie sich mit Java-Anmerkungen nicht auskennen, können Sie zunächst benutzerdefinierte Java-Anmerkungen verstehen: Benutzerdefinierte Java-Anmerkungen

1. Erstellen Sie eine benutzerdefinierte Anmerkung

requestUrl ist ein angepasster Parameter von uns

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();

}
Nach dem Login kopieren

2. Annotationen analysieren

Hier wird die AOP-Funktion (Aspektorientierte Programmierung) von Spring verwendet

Dazu wird die @Aspect-Annotation verwendet Klasse und Aspektklasse
Geben Sie den Einstiegspunkt über @Pointcut an. Der hier angegebene Einstiegspunkt ist der MyLog-Annotationstyp, dh die durch die @MyLog-Annotation geänderte Methode betritt den Einstiegspunkt.
  • @Before Vorabbenachrichtigung: Eine Benachrichtigung, die vor einem bestimmten Verbindungspunkt ausgeführt wird, aber diese Benachrichtigung kann den Ausführungsprozess vor dem Verbindungspunkt nicht verhindern (es sei denn, sie löst eine Ausnahme aus).

  • @Around Around-Benachrichtigung: Sie können vor und nach der Methodenausführung implementieren. Sie müssen point.proceed(); innerhalb der Methode ausführen.

  • @AfterReturning Post-Benachrichtigung: Benachrichtigung, die ausgeführt wird, nachdem ein Verbindungspunkt normal abgeschlossen wurde: Beispielsweise löst eine Methode keine Ausnahme aus und kehrt normal zurück.

  • @AfterThrowing Ausnahmebenachrichtigung: Benachrichtigung wird ausgeführt, wenn die Methode eine Ausnahme auslöst und beendet wird.

  • @After-Post-Benachrichtigung: Eine Benachrichtigung, die ausgeführt wird, nachdem ein Verbindungspunkt normal abgeschlossen wurde: Beispielsweise löst eine Methode keine Ausnahme aus und kehrt normal zurück.

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() + " 出现异常");
    }

}
Nach dem Login kopieren

3. Benutzerdefinierte Annotationen verwenden

Verwenden Sie die Annotation @MyLog direkt im Controller, um das Projekt zu starten und http://localhost:8080/index zu besuchen

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";
    }
}
Nach dem Login kopieren
Ergebnis

Das Obige erklärt den einfachen Prozess der Implementierung benutzerdefinierter Anmerkungen in Spring. Wenn Sie weitere benutzerdefinierte Vorgänge ausführen müssen, müssen Sie die Programmierung in diesem Aspekt durchführen Klasse.
++++执行了around方法++++
执行了 类:class com.yfs.controller.IndexController 方法:public java.lang.String com.yfs.controller.IndexController.index() 自定义请求地址:/index请求
++++执行了afterReturning方法++++
执行结果:index
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonEinfache Protokollanmerkung zur Federkonfiguration. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage