春AOPのアノテーションベースの設定

A、春AOPのアノテーションベースの設定

      1.(ここで、各メソッドは、ロギングを追加する方法を実行します)あなたはAccountServiceのを強化する必要性を作成すると仮定して、ログの実装方法というクラスのログを作成します。

// クラス射出バネコンテナ 
@Component(「ロガー」
@Aspect // 現在のクラスのスライスを表すクラスである
パブリック クラスロガー{ 
    @Pointcut(「実行(com.li.service.impl *。*。*(。 。)) " プライベート ボイドPT1(){ 

    } 
    / ** 
     *事前通知
     * / 
    @Before( " PT1() " 公共 ボイドbeforePrintLog(){ 
        System.out.printlnは( "事前通知クラスロガーこの方法は、beforePrintLogを...ログイン始まる" ); 
    } 

    / ** 
     *リア通知
     * / 
    @AfterReturning( " PT1() " 公衆 afterReturningPrintLog(){ 
        System.out.printlnは( "ポスト通知方法afterReturningPrintLog Loggerクラスは...ロギングを開始します" ); 
    } 

    / ** 
     *異常通知
     * / 
    @AfterThrowing( "PT1()" 公共 無効afterThrowingPrintLog(){ 
        System.out.printlnは( "異常通知方法afterThrowingPrintLog Loggerクラスは...ロギングを開始" ); 
    } 

    / ** 
     *最終通知
     * / 
    @After( "PT1()" 公共 ボイドafterPrintLog( ){ 
        するSystem.out.printlnは( "最終メソッド通知afterPrintLog Loggerクラスは、ロギングを開始します..." )。
    } 
    / **
     *サラウンド通知
     *質問:
     *私たちはアドバイスを周りに設定すると、エントリポイントメソッドが実行されていませんが、通知方法の実装
     *分析:
     アドバイスダイナミックプロキシ周り*は明確なエントリポイントメソッド呼び出しを持っている、と我々はしませんでした
     *解決:
     *春は、インターフェイスを提供します:ProceedingJoinPointは、インターフェイスに進む()メソッドは、エントリポイントメソッドの明示的な呼び出しに相当し
     、Springフレームワークは、私たちのための実装クラスのためのインタフェースを提供し、*インタフェースは、プログラムの実行中に、アドバイスの周りメソッドのパラメータとして使用することができます我々が使用する
     通知の周り*小枝を
     手動制御方法は、コード内で実行されたとき*向上させることができる
     * / 
    // @Around(「PT1()」)
    パブリックオブジェクトaroundPrintLog(ProceedingJoinPoint PJP){ 
        オブジェクトrtValue = ヌル;
         試み{ 
            オブジェクト[]引数 = pjp.getArgs(); 
            System.out.printlnは(「AroundPrintLogメソッドLoggerクラス開始前のログ...」); 
            rtValue = pjp.proceed(引数); // ビジネス層のメソッド(エントリポイントメソッド)を持つための明示的な呼び出し 
            のSystem.out.println(「ロガークラスをこの方法は、 "... aroundPrintLogポストをロギング開始します);
             リターンrtValue; 
        } キャッチ(ThrowableのT){ 
            System.out.printlnは( "メソッドaroundPrintLog Loggerクラスは、 "...例外をログから始まる);
             スロー 新しい新しいのAのRuntimeExceptionを(T); 
        } 最後に{ 
            するSystem.out.printlnは( "メソッドaroundPrintLog Loggerクラスは、最終的なロギングを開始します..." ); 
        } 
    } 
}

@Service( "AccountServiceの" パブリック クラス AccountServiceImpl 実装IAccountService { 

    公共 ボイドsaveAccount(){ 
        System.out.printlnは( "保存" ); 
    } 

    公共 ボイド updateAccount(int型I){ 
        するSystem.out.println(「実行更新"+ I); 
    } 

    公共 のint deleteAccount(){ 
        System.out.printlnは( "削除" );
         戻り 0 ; 
    } 
}
 
 

 

 

 

  2.設定を開きコメント

    

 <! - 場合は、パッケージをスキャンするコンテナを作成するためにあなたのconfigure春- > 
    < コンテキスト:コンポーネント・スキャンのためのベース・パッケージ変更=「com.li」> </ コンテキスト:コンポーネントスキャン> 
   <! - 設定春のオープンは、AOPのサポートコメント- > 
    < AOP:AspectJの-自動プロキシ> </ AOP:AspectJの-自動プロキシ>

 

おすすめ

転載: www.cnblogs.com/cqyp/p/12512925.html