Heim > Java > javaLernprogramm > Einführung in die Verwendung von AOP in Springboot (Codebeispiel)

Einführung in die Verwendung von AOP in Springboot (Codebeispiel)

不言
Freigeben: 2018-10-15 15:51:14
nach vorne
2355 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine Einführung in die Verwendung von AOP in Springboot (Codebeispiele). Ich hoffe, dass er für Freunde hilfreich ist.

Schritt 1: Abhängigkeiten hinzufügen

        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-aop</artifactId>  
        </dependency>
Nach dem Login kopieren

Schritt 2: Definieren Sie eine Aspektklasse

package com.example.demo.aop;
import java.lang.reflect.Method;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import static com.sun.xml.internal.ws.dump.LoggingDumpTube.Position.Before;
@Component
@Aspect // 将一个java类定义为切面类
@Order(-1)//如果有多个aop,这里可以定义优先级,越小级别越高
public class LogDemo {
    private static final Logger LOG = LoggerFactory.getLogger(LogDemo.class);

    @Pointcut("execution(* com.example.demo.test.TestController.test(..))")//两个..代表所有子目录,最后括号里的两个..代表所有参数
    public void logPointCut() {
    }
    @Before("logPointCut()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
        // 接收到请求,记录请求内容
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        System.out.println("before");

    }

    @After(value = "logPointCut()")
    public void after(JoinPoint joinPoint) {
        System.out.println("after");
    }


    @AfterReturning(returning = "ret", pointcut = "logPointCut()")// returning的值和doAfterReturning的参数名一致
    public void doAfterReturning(Object ret) throws Throwable {
        System.out.println("AfterReturning");
    }

    @Around("logPointCut()")
    public void doAround(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("around1");
        Object ob = pjp.proceed();//环绕通知的进程方法不能省略,否则可能导致无法执行
        System.out.println("around2");
    }
}
Nach dem Login kopieren

Hinweis:

Wenn dieselbe Aspektklasse zwei @Befores definiert, kann die Ausführungsreihenfolge der beiden @Befores nicht bestimmt werden

Für @Around Unabhängig davon, ob es einen Rückgabewert hat oder nicht, muss pjp.proceed() innerhalb der Methode aufgerufen werden. Andernfalls hat die Schnittstelle im Controller keine Chance, ausgeführt zu werden, was ebenfalls zum Fehler von @Before The führt Der Controller, der für den

-Test ausgelöst wird, lautet wie folgt:

package com.example.demo.test;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
public class TestController {

    @RequestMapping(value = "test",method = RequestMethod.GET)
    @ResponseBody
    public String test(String name){
        System.out.println("============method");
        return name;
    }
}
Nach dem Login kopieren

Die Konfiguration ist abgeschlossen. Überprüfen Sie den Effekt. Die Ausgabe lautet wie folgt:

around1
before============method
around2
after
AfterReturning
Nach dem Login kopieren

Wie Sie sehen können, ist die Ausführung der Aspektmethode wie folgt:

around-->before-->method--> ;around-->after-->AfterReturning

Wenn @AfterThrowing konfiguriert ist und eine Ausnahme auftritt, erfolgt die Ausführung wie folgt:

around-->before--> ;method-->around-->after-->AfterThrowing

Das obige ist der detaillierte Inhalt vonEinführung in die Verwendung von AOP in Springboot (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
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