Maison> Java> javaDidacticiel> le corps du texte

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

王林
Libérer: 2023-05-03 18:13:07
avant
1383 Les gens l'ont consulté

    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; }
    Copier après la connexion

    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(); } }
    Copier après la connexion
    • @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""; }
    Copier après la connexion

    分析上面的注解组成

    • 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éeUtilisation des aspects et des annotations personnaliséesComprenez 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

      rrreeeAnalysez la composition de l'annotation ci-dessuspublic: modifierLe 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-annotationMais 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éeType de cible DescriptionElementType.TYPES'applique aux classes, interfaces (y compris types d'annotations), énumérationsElementType.FIELDS'applique aux propriétés (y compris les constantes dans les énumérations)ElementType.METHODS'applique à méthodesElementType.PARAMETERAppliqué aux paramètres de méthodeElementType.CONSTRUCTORAppliqué au constructeur ElementType.LOCAL_VARIABLE S'applique aux variables localesElementType.ANNOTATION_TYPES'applique aux types d'annotationsElementType.PACKAGES'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.SOURCEest supprimé lors de la compilation et n'est pas inclus dans le fichier de classe
    • RetentionPolicy.SOURCE编译时被丢弃,不包含在类文件中

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

    • RetentionPolicy.RUNTIME

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

    RetentionPolicy.RUNTIMEest 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!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!