I.はじめに
この章のデータは、春AOPの使用を説明します
第二に、オープンAOP
春AOPのデフォルトは開いていない、あなたは注釈@EnableAspectJAutoProxy経由する必要があります。コメント機能はSpringコンテナコンポーネントに必要なAOP、実装原理ビューを注入することです
/ ** *开启春AOP * / @EnableAspectJAutoProxy パブリック クラスAopConfig { @Bean 公共電卓電卓(){ 返す 新しい電卓を(); } @Bean 公共LogAop logAop(){ 戻り 新しい)(LogAopします。 } }
第三に、ターゲット・オブジェクトの定義
ターゲットオブジェクトの定義、およびその他のオブジェクトは、違いはありませんようにビジネスコードの春侵襲なしAOP
パブリック クラス電卓{ 公共 のint DIV(INT NUM1、INT NUM2){ 戻り NUM1 / NUM2。 } }
第四に、定義セクション
- セクションでSpringコンテナを伝える@Aspect
- ターゲットインターセプト方法を定義する必要があり@Pointcut
- 呼び出す前に@Beforeターゲット方法
- 実行メソッド呼び出しの後に@After目標
- @AfterReturningターゲットメソッドは、実行後、呼び出し元に戻ります
- ターゲットメソッドを@AfterThrowingは呼び出した後に例外がスローされます
- @Around @Beforeと@Afterため、メソッド呼び出しを手動で制御することができます
@Aspect パブリック クラスLogAop { @Pointcut( "実行(* indi.zqc.spring.bean.Calculator。*(..))" ) 公共 ボイドポイントカット(){ } @Before(値 = "ポイントカット()" ) 公衆 ボイド(ジョインポイントジョインポイント){前 のSystem.out.println( "LogAop ---前---" + 。joinPoint.getSignature()getDeclaringTypeName())。 } @After(値 = "ポイントカット()" ) 公共 ボイド(ジョインポイントジョインポイント){後 のSystem.out.println( "LogAop ---後---" +joinPoint.getSignature()getDeclaringTypeName())。 } @AfterReturning(値 = "ポイントカット()"、 "結果"を返す= ) 公共 ボイド{afterReturning(ジョインポイントジョインポイント、オブジェクト結果) のSystem.out.println( "LogAop --- afterReturning ---" + 結果)。 } @AfterThrowing(値 = "ポイントカット()"、=投げ"例外" ) 公共 ボイドafterThrowing(ジョインポイントジョインポイント、例外例外){ するSystem.out.println( "LogAop --- afterThrowing ---" + 例外)。 } @Around(値 = "ポイントカット()"公共の周りのオブジェクト(ProceedingJoinPointジョインポイント)がスローされたThrowable { するSystem.out.println( "LogAop ---周り---前に" )。 // 调用目标方法 。オブジェクト=進む)(joinPoint.proceedします。 System.out.println( "LogAop --- ---周りの後に" ); 戻る進みます。 } }
第五に、ターゲットオブジェクト、及びスプリング収容部に注ぎ
これは、切断しなければならないとターゲット・オブジェクトを有効にするには、Springコンテナに注入されています
第六に、コール
パブリック クラスAopConfigTest { @Test 公共 ボイド試験(){ AnnotationConfigApplicationContextのApplicationContext = 新しい AnnotationConfigApplicationContext(AopConfig。クラス)。 電卓電卓 = applicationContext.getBean(電卓クラス)。 calculator.div( 1、1 )。 } }