Day03:AOP

2293 ワード

1、横断
  • 接続点:通知を適用するすべての点
  • 通知:うどんが何であるか、いつ
  • を使用するか
  • 接点:アプリケーションの特定の位置(どの接続点)を通知する
  • 切面:通知と切点の結合
  • 2、SpringのAOP
    2.1 AOPサポートタイプ
  • エージェントベースのクラシックSpring AOP
  • 純POJO切面
  • @AspectJ注記駆動の切面
  • 注入式AspectJ切面
  • 最初の3つは,動的エージェントに基づいて構築され,メソッドブロックのみをサポートする.
    2.1.1クラシックSpring AOP
    不器用な繰り返し、ProxyFactoryBeanを直接使用
    2.1.2 POJO切麺
  • @Aspect注記クラスを使用してメソッドに注記するとともに、このクラスも通常のクラス@Before("execution(* concert.Performance.perform(..))")メソッドであり、各メソッドには接点式が必要であり、@After、 @AfterReturning、 @AfterThrowing、 @Around[ ]、 @Before
  • も含む.
  • は、@ Poingcut注釈によって命名された接点を定義し、@Poingcut("execution(** concert.Performance.perform(..))") public void performace(){} @Before("performance()")
  • を呼び出す.
    2.2クラスレベルの自動エージェントの構成
    2.2.1 JavaConfigで、注記@Configuration @EnableAspectJAutoProxy @ComponentScan
    2.2.2 xmlでの構成
  • aopネーミングスペースxmlns:aop="http://www.springframework.org/schema/aop" xml:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aopsoring-aop.xsd
  • を導入

  • 2.3周回通知
  • 例では、@Around注記`@Around(「performance()」)public void wtachPerformance(ProceddingJoinPoint jp){
    jp.proceed();//呼び出さないと通知メソッドの呼び出しがブロックされます

  • }`
    2.4パラメータ付き通知
    `@Poingcut("execution(** soundsystem.CompactDisc.playTrack(int)) && args(trackNumber) ") public void trackPlayed(int trackNumber){}
    @Before("trackPlayed(trackNumber)")public void countTrack(int trackNumber){//trackNumberの値を変更}`//式分解:*:任意のタイプsoundsystem.CompactDiseを返す:メソッドが属するタイプplayTrack(int):メソッドおよび受け入れられるパラメータタイプargs(trackNumber):指定パラメータ
    3、注釈と新機能
    3.1新しいメソッド(インタフェース)の追加
    既存のbeanにインタフェースを追加し、エージェントを介して新しいインタフェースを暴露する.このメソッドが呼び出されると、エージェントはこの呼び出しを新しいインタフェースを実現した他のオブジェクト@Aspect public class EncoreableIntroducer { @DeclareParents(value="concert.Performance+", defaultImpl=DefaultEncorealbe.class) public static Encoreable encoreable; }//解釈説明value:インタフェースを導入するbeanを指定し、+そのすべてのサブタイプを表し、そのボディdefaultImplではありません:機能を導入する実装クラス@DeclareParents注記:導入するインタフェース