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の-自動プロキシ>