Maison  >  Article  >  Java  >  Quelle est la méthode d’amélioration des aspects personnalisés Java ?

Quelle est la méthode d’amélioration des aspects personnalisés Java ?

王林
王林avant
2023-05-03 18:13:071392parcourir

    Amélioration de l'aspect personnalisé Java

    1. Personnaliser une annotation

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

    2. Implémenter une logique améliorée

    @Slf4j
    @Aspect
    @Component
    public class CacheNullifyHandler {
    
        @AfterReturning("@annotation(com.xxx.CacheNullify)")
        public void afterReturning() {
            log.info("走你");
            CacheServiceUtil.delUserInfoCache();
        }
    }
    • @annotation : Ce qui suit, c'est vous Pour améliorer le annotation (méthode annotée), vous pouvez écrire directement le nom de l'annotation, mais afin d'éviter les noms en double, écrivez autant que possible le chemin complet@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(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    @Documented
    public @interface MyAnnotation {
        String value() default"";
    }

    分析上面的注解组成

    • 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.PACKAGE

    • 🎜@AfterReturning : La méthode est exécuté et réussi Déclenché lors du retour🎜🎜🎜@After : Déclenché une fois la méthode terminée (y compris l'achèvement de l'exécution ou l'exception levée)🎜🎜🎜🎜Utiliser 🎜3. 🎜🎜 si nécessaire, ajoutez l'annotation @CacheNullify à la méthode améliorée🎜🎜Utilisation des aspects et des annotations personnalisées🎜🎜Comprenez d'abord les concepts de base et l'utilisation des aspects et des annotations personnalisées🎜

      Introduction à AOP

      🎜AOP est le abréviation de Aspect Oriented Programming , signifiant : programmation orientée aspect, une technologie qui permet une maintenance unifiée des fonctions du programme grâce à la précompilation et aux agents dynamiques pendant l'exécution. 🎜🎜AOP est la continuation de la POO, un point chaud du développement logiciel, un contenu important dans le framework Spring et un paradigme dérivé de la programmation fonctionnelle. 🎜🎜AOP peut être utilisé pour isoler différentes parties de la logique métier, réduisant ainsi le couplage entre les différentes parties de la logique métier, améliorant la réutilisabilité du programme et améliorant l'efficacité du développement. 🎜

      Définition AOP

      🎜🎜🎜🎜Aspect (Aspect)🎜🎜🎜🎜La déclaration d'Aspect est similaire à la déclaration de classe en Java, et Aspect contiendra quelques Pointcuts et les conseils correspondants. 🎜🎜🎜🎜🎜Point de jonction (point de connexion) 🎜🎜🎜🎜 fait référence à ces points interceptés Au printemps, ces points font référence à des méthodes. 🎜🎜🎜🎜🎜Pointcut (pointcut) 🎜🎜🎜🎜 représente un groupe de points communs sont soit combinés via des relations logiques, soit concentrés via des caractères génériques, des expressions régulières, etc. Il définit où les conseils correspondants seront. se produire. 🎜🎜🎜🎜🎜Conseil (amélioration/notification) 🎜🎜🎜🎜Le conseil définit les opérations spécifiques à effectuer aux points du programme définis dans Pointcut. Il se distingue par avant, après et autour de chaque point de joint Avant, après ou à la place de l'exécution du code. 🎜🎜🎜🎜🎜Introduction (introduction) 🎜🎜🎜🎜Une notification spéciale qui peut ajouter dynamiquement certaines méthodes sans modifier le code source. 🎜🎜🎜🎜🎜Target (objet cible) 🎜🎜🎜🎜Insérez-vous dans l'objet cible de Advice. 🎜🎜🎜🎜🎜Tissage (tissage)🎜🎜🎜🎜Le processus de connexion d'Aspect à d'autres objets et de création d'un objet conseillé🎜

      Introduction à l'annotation

      🎜L'annotation est une méthode qui peut être ajoutée des métadonnées dans le code source Java, les méthodes, classes, paramètres et packages peuvent tous être modifiés avec des annotations. 🎜🎜L'annotation peut être considérée comme une marque spéciale qui peut être utilisée sur les méthodes, les classes, les paramètres et les packages. Le programme peut détecter ces marques et effectuer un traitement spécial lors de la compilation ou de l'exécution. 🎜

      Éléments et composition

      rrreee🎜Analysez la composition de l'annotation ci-dessus🎜🎜🎜🎜🎜public: modifier🎜🎜🎜🎜Le modificateur d'accès doit être public, s'il n'est pas écrit, il est par défaut public ; 🎜🎜 🎜🎜🎜@interface : Mot-clé 🎜🎜🎜🎜Le mot-clé est @interface 🎜🎜🎜🎜🎜MyAnnotation : Nom de l'annotation 🎜🎜🎜🎜Le nom de l'annotation est le nom de l'annotation personnalisée, comme MyAnnotaion ci-dessus est le nom de l'annotation 🎜🎜🎜🎜🎜 valeur : élément de type d'annotation 🎜🎜🎜🎜L'élément de type d'annotation est le contenu des paramètres de marque d'annotation selon les besoins, tels que la valeur de ce qui précède. annotation ; 🎜

      Méta-annotation🎜Mais une analyse minutieuse inclut également les quatre annotations commençant par @@Target, @Retention, @Inherited, @Documented). Ce sont les quatre méta-annotations sous-jacentes, des annotations pour annoter d'autres annotations🎜🎜🎜@Target : utilisé Décrivez le champ d'utilisation de l'annotation, où l'annotation peut être utilisée🎜🎜🎜Type de cible Description🎜🎜🎜🎜ElementType.TYPE S'applique aux classes, interfaces (y compris types d'annotations), énumérations🎜🎜🎜ElementType.FIELD S'applique aux propriétés (y compris les constantes dans les énumérations)🎜🎜🎜ElementType.METHOD S'applique à méthodes🎜🎜 🎜ElementType.PARAMETER Appliqué aux paramètres de méthode🎜🎜🎜ElementType.CONSTRUCTOR Appliqué au constructeur 🎜🎜🎜ElementType.LOCAL_VARIABLE S'applique aux variables locales🎜🎜🎜ElementType.ANNOTATION_TYPE S'applique aux types d'annotations🎜🎜🎜ElementType.PACKAGE S'applique aux forfaits 🎜

    Note : Par exemple, @Target(ElementType.METHOD), l'annotation du flag est utilisée sur la méthode, mais si on met le flag d'annotation sur la classe, une erreur sera être signalé

    #🎜 🎜#

    @Rétention : Indique le cycle de vie de l'annotation

    Type de cycle de vie Description

    #🎜 🎜#
      RetentionPolicy.SOURCE est supprimé lors de la compilation et n'est pas inclus dans le fichier de classe
    • RetentionPolicy.SOURCE    编译时被丢弃,不包含在类文件中

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

    • RetentionPolicy.RUNTIME

      RetentionPolicy.CLASS est supprimé lors du chargement de la JVM. Contenue dans le fichier de classe, la valeur par défaut

    RetentionPolicy.RUNTIME est chargée par la JVM , inclus dans le fichier de classe, et peut être obtenu au moment de l'exécution. To

    #🎜🎜##🎜🎜#@Inherited : Il s'agit d'une annotation de marque @Inherited indique qu'un certain type annoté est hérité. Si un type d'annotation modifié avec @Inherited est utilisé pour une classe, cette annotation sera utilisée pour les sous-classes de la classe. #🎜🎜##🎜🎜# @Documenté : Indique que l'élément marqué par cette annotation peut être documenté par Javadoc ou des outils similaires#🎜🎜#

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer