春の注釈駆動開発(C) - AOPの使用

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 )。
    } 

}

おすすめ

転載: www.cnblogs.com/zhuqianchang/p/11422551.html