aspectj実現aop


文書ディレクトリ
  • 前言
  • 一、基本手順
  • 二、動作例
  • 1.maven依存
  • 2.切面類は
  • を実現する.
  • 3.springのプロファイル
  • 4.テスト

  • 前言
        aspectJ:オープンソースのaop専用のフレームワークです.Springフレームワークにはaspectjフレームワークが統合されており、springでaspectjの機能を使用することができます.    aspectJフレームワークによるaopの実現には2つの方法がある.   1.xmlを使用したプロファイル:グローバルトランザクションの構成   2.注釈を使用して、私たちはプロジェクトの中でaop機能をしなければなりません.一般的に注釈を使用しています.aspectjには5つの注釈があります.
    一、基本手順
    aspectjを使用してaopを実装する基本手順:1.mavenプロジェクトを新規作成する2.依存関係を追加する    1)spring依存    2)aspectj依存    3)junitユニットテスト3.ターゲットクラスを作成する:インタフェースと彼の実装クラス.     クラス内のメソッドに機能を追加する4.接面クラスを作成する:通常クラス     1)クラスの上に@Aspectを加える     2)クラスでメソッドを定義する方法は,実行する機能コードを接面することである.     メソッドの上にaspectjの通知注記を加えます.たとえば@Before     カットポイント式execution()5.springのプロファイルを作成するには、オブジェクトを宣言し、コンテナ統合管理宣言オブジェクトにオブジェクトを渡す必要があります注釈またはxmlプロファイルを使用します.     1)ターゲットオブジェクトの宣言     2)切麺類オブジェクトの宣言     3)aspectjフレームワークの自動エージェントジェネレータラベルを宣言します.     自動エージェントジェネレータ:エージェントオブジェクトの自動作成機能を完了します.6.springコンテナからターゲットオブジェクト(実際にはエージェントオブジェクト)を取得するテストクラスを作成します.     エージェント実行方法によりaopの機能強化を実現する.
    二、操作例
    1.maven依存
         
       <dependency>
          <groupId>org.springframeworkgroupId>
          <artifactId>spring-contextartifactId>
          <version>5.2.5.RELEASEversion>
      dependency>
        
        <dependency>
          <groupId>org.springframeworkgroupId>
          <artifactId>spring-aspectsartifactId>
       dependency>
    

    2.切面類実現
    
     *  @Aspect :  aspectj      。
     *       :         。
     *        :              ,             
     *@Aspect
    public class MyAspect {
         
    
         *     ,          。
         ** 1.     public
         * 2.       
         * 3.       
         * 4.       ,       。
         *        ,        ,           。
        
    }
    

    3.springのプロファイル
     
     
        
     
        <aop:aspectj-autoproxy proxy-target-class="true"/>
    

    4.テスト
    @Test
        public void test01(){
         
            String config="applicationContext.xml";
            ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
            //          
            SomeService proxy = (SomeService) ctx.getBean("someService");
    
            //com.sun.proxy.$Proxy8 :jdk    
            //com.sun.proxy.$Proxy0
            System.out.println("proxy:"+proxy.getClass().getName());
            //           ,         ,     
            proxy.doSome("ttyj",25);
        }