SpringBootでのAOP+カスタム注記の簡単な使用


記事の目次
  • 1.前言
  • .カスタム注釈
  • 2.1.メタ注釈
  • 2.2.カスタム注釈
  • 2.3.注釈
  • を用いる
  • 3. AOP
  • 3.1導入依存
  • 3.2.Aspect類
  • 3.3.小結
  • 参照
  • 1.はじめに
    AOP関連記事では、Springプロジェクトでのブロガー以前のAOPの使用を参照してください.
  • Intellij IDEA Aspectjに基づくSpringプロジェクトのAOPアクション(注記)
  • Intellij IDEA作成SpringプロジェクトのAspectjベースAOPアクション(XML構成)
  • この文は主にカスタム注釈、AOPプログラミングの組み合わせを説明して使用して、実用的で優雅さを失わないで、ハハハハ
    2.カスタム注記
    2.1.メタ注記
    メタ注釈は修飾注釈の注釈であり、Java 5で定義されたメタ注釈:
  • @Target
  • @Retention
  • @Documented
  • @Inherited

  • @Targetは、Annotationによって修飾されたオブジェクト範囲を定義します.たとえば、TYPE@Retentionを使用してクラスまたはインタフェース上でAnnotationの保存時間を定義します.たとえば、「実行時」RUNTIME@Documented定義を有効に使用して、他のタイプのannotationがマークアップされたプログラムメンバーとして使用されるべき共通APIを記述します.修飾された注釈はドキュメント化されます@Inheritedは、その注釈効果が注釈修飾されたクラスのサブクラスに所有されるかどうかを定義します.
    詳細については、Java Annotation(メタ注釈とカスタム注釈)の詳細を参照してください.
    2.2.カスタム注釈
    新しい注釈クラスを作成します.ここではプレゼンテーションだけをして、勝手に名前をつけます.
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface AnnotationTest {
        String value() default "v1";
    }
    

    パラメータの説明:
  • @Target(ElementType.METHOD)は、この注釈が方法
  • に作用することを示す.
  • @Retention(RetentionPolicy.RUNTIME)は、実行時有効
  • を示す.
  • @Documented文書化
  • カスタム注釈の定義が完了し、クラスに直接作用します.現在は実装されておらず、クラスに使用しても効果はありません.
    2.3.注釈の使用
    public class AnnotationServiceDemo 
        //          
        @AnnotationTest("v2")
        public String arroud(String name){
            System.out.println("AnnotationServiceDemo#arroud");
            return "AnnotationServiceDemo#arroud";
        }
    }
    

    3. AOP
    3.1導入依存
    <dependency>
        <groupId>org.aspectjgroupId>
        <artifactId>aspectjweaverartifactId>
        <version>${aspectjweaver.version}version>
    dependency>
    

    aspectjweaver.version最新バージョンの使用を推奨
    3.2.Aspectクラス
    クラスを新規作成し、@Aspect注記で修飾し、Aspectクラスであることを示します.
    @Aspect
    @Component
    public class AnnotationAspect {
    
    	//     。 AOP               
        @Pointcut("@annotation(AnnotationTest)")
        public void annotationPointCut() 
        }   
    
        //     
        @Around("annotationPointCut()")
        public String around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
            MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature();
            Method method = methodSignature.getMethod();
            //            
            AnnotationTest annotation = method.getAnnotation(AnnotationTest.class);
            System.out.println("     :" + annotation.value());        
            //       
            for (int i = 0; i < proceedingJoinPoint.getArgs().length ; i++){
                System.out.println(proceedingJoinPoint.getArgs()[i]);
            }        
            //        
            if ("v2".equalsIgnoreCase(annotation.value())){
                System.out.println("    around v2");
                return "    around v2";
            } else {        
                //          
                proceedingJoinPoint.proceed();
                System.out.println("  around   ");
                return "  around   ";
            }
        }
    }
    

    コード内の重要な箇所にコメントが記載されています.ここでは、オービット拡張とカスタム注釈を組み合わせて説明します.完全なコード:https://github.com/chenlinghong/demo/tree/master/aop
    3.3.まとめ
    カスタム注釈+AOPプログラミング方式を組み合わせて使用し、注釈機能をどのように実現するかに重点を置いており、ちょうどAOP方式で優雅に実現されている.
    知識が限られていることを考慮して、間違いがあれば、コメントを歓迎します.
    リファレンス
  • Java Annotation(メタ注釈とカスタム注釈)