Heim > Java > JavaBase > Hauptteil

Detaillierte Erläuterung der Spring AOP-Anmerkungen

Guanhui
Freigeben: 2020-06-28 18:00:16
nach vorne
3306 Leute haben es durchsucht

Detaillierte Erläuterung der Spring AOP-Anmerkungen

Aspekt: ​​Aspekt

Aspekt = Punktschnitt + Benachrichtigung. In alten Spring-Versionen wird normalerweise die XML-Konfiguration verwendet, aber jetzt wird eine Klasse normalerweise mit @Aspect annotiert. Aspekte sind dafür verantwortlich, übergreifende Logik (Ratschläge) in bestimmte Verbindungspunkte einzubinden.

Zielobjekt: Ziel

Das zu verbessernde Objekt.

Join Point: JoinPoint

Der Programmausführungspunkt, der abgefangen werden kann, ist die Methode in der Klasse im Frühjahr.

Einstiegspunkt: PointCut

Die Methode, die das Abfangen durchführen muss, dh die Methode, die speziell die übergreifende Logik implementiert. Pointcut-Regeln werden im Frühjahr durch die Pointcut-Ausdruckssprache AspectJ beschrieben.

Der Unterschied zwischen Einstiegspunkten und Verbindungspunkten: Verbindungspunkte sind alle Punkte, die „geschnitten“ werden können; Einstiegspunkte sind die Punkte, die wirklich geschnitten werden wollen.

Beratung: Beratung

Übergreifende Logik für Einstiegspunkte, einschließlich verschiedener Arten von Ratschlägen wie „um“, „vorher“ und „nachher“ .

Der Benachrichtigungsaktionspunkt ist wie folgt benannt:

  • vorher: wird vor dem Einstiegspunkt ausgeführt

  • nachher: nach Nach dem Einstiegspunkt ausführen

  • um: Abfangmethode am Einstiegspunkt, vor und nach der Anpassung, flexibler

Es gibt auch einige Ausnahmebehandlungsbenachrichtigungen. Hier sind keine Beispiele für

Weben: Weben

Der Prozess des Verbindens von Aspekten und Zielobjekten, um Proxy-Objekte zu erstellen. Im Frühjahr wird ein dynamischer Proxy verwendet. Wenn das Zielobjekt über eine Schnittstelle verfügt, verwenden Sie den dynamischen JDK-Proxy. Andernfalls verwenden Sie den dynamischen cglib-Proxy.

Nachdem wir über so viele Konzepte gesprochen haben, kann ein Blick auf die Code-Implementierung den Lesern helfen, sie besser zu verstehen. Hier ist eine einfache AOP-Demo, die die Methode durch Anmerkungen erweitert.
Zuerst ist die Aspektklasse:

package com.example.demo.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * @author Fcb
 * @date 2020/6/20
 * @description 切面类=切入点+通知
 */
@Aspect
@Component
public class LogAspect {

  //这个方法定义了切入点
  @Pointcut("@annotation(com.example.demo.aop.anno.MyLog)")
  public void pointCut() {}

  //这个方法定义了具体的通知
  @After("pointCut()")
  public void recordRequestParam(JoinPoint joinPoint) {
    for (Object s : joinPoint.getArgs()) {
      //打印所有参数,实际中就是记录日志了
      System.out.println("after advice : " + s);
    }
  }

  //这个方法定义了具体的通知
  @Before("pointCut()")
  public void startRecord(JoinPoint joinPoint) {
    for (Object s : joinPoint.getArgs()) {
      //打印所有参数
      System.out.println("before advice : " + s);
    }
  }

  //这个方法定义了具体的通知
  @Around("pointCut()")
  public Object aroundRecord(ProceedingJoinPoint pjp) throws Throwable {
    for (Object s : pjp.getArgs()) {
      //打印所有参数
      System.out.println("around advice : " + s);
    }
    return pjp.proceed();
  }
}
Nach dem Login kopieren

Anmerkung:

package com.example.demo.aop.anno;
import java.lang.annotation.*;
/**
 * @author Fcb
 * @date 2020/6/20
 * @description
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface MyLog {
}
Nach dem Login kopieren

Zielklasse:

package com.example.demo.aop.target;

import com.example.demo.aop.anno.MyLog;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Fcb
 * @date 2020/6/20
 * @description
 */
@RestController
public class MockController {

  @RequestMapping("/hello")
  @MyLog
  public String helloAop(@RequestParam String key) {
    System.out.println("do something...");
    return "hello world";
  }

}
Nach dem Login kopieren

Schließlich ist die Testklasse:

package com.example.demo.aop.target;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
/**
 * @author Fcb
 * @date 2020/6/20
 * @description
 */
@SpringBootTest
class MockControllerTest {
  @Autowired
  MockController mockController;

  @Test
  void helloAop() {
    mockController.helloAop("aop");
  }
}
Nach dem Login kopieren

Konsolenergebnis :

Um Rat: aop
Vor Rat: aop
tun Sie etwas...
Nach dem Rat: aop

Empfohlenes Tutorial: "Java-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Spring AOP-Anmerkungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!