Heim  >  Artikel  >  Java  >  Was ist die Methode zur benutzerdefinierten Java-Aspektverbesserung?

Was ist die Methode zur benutzerdefinierten Java-Aspektverbesserung?

王林
王林nach vorne
2023-05-03 18:13:071394Durchsuche

„Benutzerdefinierte Java-Aspektverbesserung“ Annotation (annotierte Methode), Sie können den Annotationsnamen direkt schreiben, aber um doppelte Namen zu vermeiden, schreiben Sie so viel wie möglich den vollständigen Pfad

      @AfterReturning: Die Methode ist ausgeführt und erfolgreich. Wird bei der Rückkehr ausgelöst

    @After: Wird ausgelöst, nachdem die Methode abgeschlossen ist (einschließlich Ausführungsabschluss oder ausgelöster Ausnahme)

    3

    Bei Bedarf fügen Sie der erweiterten Methode die @CacheNullify-Annotation hinzu

    Verwendung von Aspekten und benutzerdefinierten Annotationen
    • Verstehen Sie zunächst die grundlegenden Konzepte und die Verwendung von Aspekten und benutzerdefinierten Annotationen

      Einführung in AOP

      @annotation: 后面跟的是你要增强的注解(所注释的方法), 可以直接写注解名, 但是为了防止重名尽可能写全路径吧
    • @AfterReturning: 方法执行完并成功返回则触发

    • @After: 方法完毕后触发(包括执行完毕, 或者抛出异常)

    3. 使用

    在需要增强的方法上加上@CacheNullify注解

    切面、自定义注解的使用

    先了解切面和自定义注解的基本概念和使用

    AOP简介

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。

    AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。

    利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

    AOP定义

    • Aspect(切面)

    Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。

    • Joint point(连接点)

    指那些被拦截的点,在spring中这些点指的是方法。

    • Pointcut(切入点)

    表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。

    • Advice(增强/通知)

    Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。

    • Introduction(引介)

    一种特殊的通知,可以在不修改源码的情况下动态添加一些方法。

    • Target(目标对象)

    织入 Advice 的目标对象.。

    • Weaving(织入)

    将 Aspect 和其他对象连接起来, 并创建 Adviced object 的过程

    注解简介

    注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。

    注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。

    元素和组成

    @Target(value = { ElementType.TYPE, ElementType.METHOD })
    @Retention(RetentionPolicy.RUNTIME)
    public @interface CacheNullify {
        boolean value = true;
    }

    分析上面的注解组成

    • public:修饰符

    访问修饰符必须为public,不写默认为pubic;

    • @interface:关键字

    关键字为@interface;

    • MyAnnotaion:注解名称

    注解名称为自定义注解的名称,例如上面的MyAnnotaion就是注解名称

    • value:注解类型元素

    注解类型元素是注解中内容,根据需要标志参数,例如上面的注解的value;

    元注解

    但仔细分析还包含@开头的四个注解@Target、@Retention、@Inherited、@Documented)这是四个是底层的元注解,注解其他注解的注解

    @Target:用于描述注解的使用范围,该注解可以使用在什么地方

    Target类型    描述

    • ElementType.TYPE    应用于类、接口(包括注解类型)、枚举

    • ElementType.FIELD    应用于属性(包括枚举中的常量)

    • ElementType.METHOD    应用于方法

    • ElementType.PARAMETER    应用于方法的形参

    • ElementType.CONSTRUCTOR    应用于构造函数

    • ElementType.LOCAL_VARIABLE    应用于局部变量

    • ElementType.ANNOTATION_TYPE    应用于注解类型

    • ElementType.PACKAGEAOP ist die Abkürzung für Aspect Oriented Programming, was bedeutet: aspektorientierte Programmierung, eine Technologie, die eine einheitliche Aufrechterhaltung der Programmfunktionen durch Vorkompilierung und dynamische Agenten während der Laufzeit erreicht.

      🎜AOP ist die Fortsetzung von OOP, einem Hotspot in der Softwareentwicklung, einem wichtigen Inhalt im Spring-Framework und einem abgeleiteten Paradigma der funktionalen Programmierung. 🎜🎜AOP kann verwendet werden, um verschiedene Teile der Geschäftslogik zu isolieren, wodurch die Kopplung zwischen den verschiedenen Teilen der Geschäftslogik verringert, die Wiederverwendbarkeit des Programms verbessert und die Effizienz der Entwicklung verbessert wird. 🎜

      AOP-Definition

      🎜🎜🎜🎜Aspect (Aspect)🎜🎜
    • 🎜🎜Aspect-Deklaration ähnelt der Klassendeklaration in Java, und Aspect enthält einige Pointcuts und entsprechende Ratschläge. 🎜🎜🎜🎜🎜Gelenkpunkt (Verbindungspunkt)🎜🎜🎜🎜 bezieht sich auf die abgefangenen Punkte. Im Frühjahr beziehen sich diese Punkte auf Methoden. 🎜🎜🎜🎜🎜Pointcut (Pointcut) 🎜🎜🎜🎜 stellt eine Reihe von Verbindungspunkten dar, die entweder durch logische Beziehungen kombiniert oder durch Platzhalter, reguläre Ausdrücke usw. konzentriert werden. Es definiert, wo der entsprechende Hinweis angezeigt wird geschehen. Hinweis (Verbesserung/Benachrichtigung) nach oder anstelle der Ausführung von Code. 🎜🎜🎜🎜🎜Einführung (Einführung) 🎜🎜🎜🎜Eine spezielle Benachrichtigung, mit der einige Methoden dynamisch hinzugefügt werden können, ohne den Quellcode zu ändern. 🎜🎜🎜🎜🎜Ziel (Zielobjekt)🎜🎜🎜🎜In das Zielobjekt der Beratung einbinden. 🎜🎜🎜🎜🎜Weben (Weben)🎜🎜🎜🎜Der Prozess, Aspect mit anderen Objekten zu verbinden und ein empfohlenes Objekt zu erstellen🎜

      Annotation-Einführung

      🎜Annotation ist eine Methode, die hinzugefügt werden kann Die Metadaten im Java-Quellcode, in Methoden, Klassen, Parametern und Paketen können mit Anmerkungen geändert werden. 🎜🎜Annotationen können als spezielle Tags betrachtet werden, die für Methoden, Klassen, Parameter und Pakete verwendet werden können. Das Programm kann diese Tags erkennen und beim Kompilieren oder Ausführen eine spezielle Verarbeitung durchführen. 🎜

      Elemente und Zusammensetzung

      @Slf4j
      @Aspect
      @Component
      public class CacheNullifyHandler {
      
          @AfterReturning("@annotation(com.xxx.CacheNullify)")
          public void afterReturning() {
              log.info("走你");
              CacheServiceUtil.delUserInfoCache();
          }
      }
      🎜Analysieren Sie die obige Annotationszusammensetzung🎜🎜🎜🎜🎜public: modifier🎜🎜🎜🎜Der Zugriffsmodifikator muss öffentlich sein. Wenn er nicht geschrieben wird, ist er standardmäßig öffentlich; ?? Wie oben ist MyAnnotaion der Annotationsname 🎜🎜🎜🎜🎜 Wert: Annotation-Typ-Element 🎜🎜🎜🎜Das Annotation-Typ-Element ist der Inhalt in der Annotation Markieren Sie Parameter nach Bedarf, wie z. B. den oben genannten Wert Annotation; 🎜

      Meta-Annotation🎜Aber eine sorgfältige Analyse umfasst auch die vier Annotationen, die mit @@Target, @Retention, @Inherited, @Documented beginnen. Dies sind die vier zugrunde liegenden Meta-Annotationen, Annotationen zum Annotieren anderer Anmerkungen🎜🎜🎜@Ziel: verwendet Beschreiben Sie den Anwendungsbereich der Anmerkung, wo die Anmerkung verwendet werden kann🎜🎜🎜Zieltyp Beschreibung🎜🎜🎜🎜ElementType.TYPE Gilt für Klassen, Schnittstellen (einschließlich Annotationstypen), Aufzählungen🎜🎜🎜ElementType.FIELD Gilt für Eigenschaften (einschließlich Konstanten in Aufzählungen)🎜🎜🎜ElementType.METHOD Gilt für Methoden🎜🎜 🎜ElementType.PARAMETER Auf Methodenparameter angewendet🎜🎜🎜ElementType.CONSTRUCTOR Auf Konstruktor angewendet 🎜🎜🎜ElementType. LOCAL_VARIABLE Gilt für lokale Variablen🎜🎜🎜ElementType.ANNOTATION_TYPE Gilt für Annotationstypen🎜🎜🎜ElementType.PACKAGE Gilt für Pakete 🎜

    Hinweis: Zum Beispiel @Target(ElementType.METHOD), die Annotation des Flags wird für die Methode verwendet, aber wenn wir diese Annotation für die Klasse markieren, wird ein Fehler gemeldet

    @Retention: Zeigt an Lebenszyklus der Annotation

    Lebenszyklustyp Beschreibung

    • RetentionPolicy.SOURCE Wird beim Kompilieren verworfen und ist nicht in der Klassendatei enthaltenRetentionPolicy.SOURCE    编译时被丢弃,不包含在类文件中

    • RetentionPolicy.CLASS    JVM加载时被丢弃,包含在类文件中,默认值

    • RetentionPolicy.RUNTIME

    RetentionPolicy.CLASS code> Wird beim Laden der JVM verworfen und in die Klassendatei aufgenommen. Der Standardwert <p></p> <p></p> <code>RetentionPolicy.RUNTIME wird von der JVM geladen, in die Klassendatei aufgenommen und kann abgerufen werden zur Laufzeit 🎜🎜🎜🎜@Inherited: ist eine Markierungsanmerkung, @Inherited veranschaulicht, dass ein annotierter Typ vererbt wird. Wenn für eine Klasse ein mit @Inherited geänderter Annotationstyp verwendet wird, wird diese Annotation für Unterklassen der Klasse verwendet. 🎜🎜 @Documented: Zeigt an, dass das durch diese Annotation markierte Element von Javadoc oder ähnlichen Tools dokumentiert werden kann🎜

    Das obige ist der detaillierte Inhalt vonWas ist die Methode zur benutzerdefinierten Java-Aspektverbesserung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen