Spring > Spring AOP

「Spring/Spring AOP」の編集履歴(バックアップ)一覧はこちら

Spring/Spring AOP - (2011/12/24 (土) 00:16:50) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

-Spring AOPのJoin pintの対象はビーンのメソッド実行のみ -AOPコンセプト --Aspect --Join point --Advice --Pointcut --Introduction --Target object --AOP proxy --Weaving -AOPの選択 --Spring AOP vs AspectJ ⇒ 相互に補完 --@AspectJ スタイル vs XML スタイル -@AspctJを使う --xmlの設定 <aop:aspectj-autoproxy/> --必要なJar:aspectjweaver.jar, aspectjrt.jar -pointcut --pintcutの定義 ---pointcutにマッチするのは、pubicなメソッドのみ ---pointcut expression⇒@Pointcut ---pointcut signature⇒戻り値voidのメソッド --PCD ---execution ---within ---this ---target ---args ---@target ---@args ---@within ---@annotation ---bean (*ワイルドカード利用可) --pointcutの結合:&& , | , ! ---pointcutの結合で、@Pointcutメソッド名の可視性はJavaと同じ --executionの書き方 execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?) --PCDでは、なるべく絞り込むように記述する。⇒ weaving時のパフォーマンスがよくなる。 ---少なくともkindedとscopingを含むように。 -advise --種類 : 一番少ないコードで実装できるものを選ぶべき ---@Before(pointcut) ---@AfterReturning(pointcut,returning) -> メソッドの戻り値型のマッチング制約も同時につけられる ---@AfterThrowing(pointcut, throwing) -> 例外の型のマッチング制約も同時につけられる ---@After(pointcut) ---@Around(pointcut) --pointcutとの紐付 ---pointcut名 or pointcut表現 --join pointへのアクセス ---メソッドの第一パラメータにJoinPoint(@AroundメソッドはProceedingJoinPoint)を指定できる(任意) --pointcut 表現でargsを使って、メソッドの引数の型を明示的に指定できる @Before(XXX && args(hoge,..)) public void do(Hoge hoge){ ... } ---join pointのマッチングでパラメータの型も見てくれる。 --pointcut のargNames属性でパラメータの名前を指定してメソッドで使うことができる。 @Before(XXX, argNames="hoge") public void do(Hoge hoge){ ... } --adviceの実行順序は、優先度の高いものから「先に入って、後からでてくる」 ---優先度の設定は、org.springframework.core.Ordered を実装するか、@Order をつける -Introductions -*TODO:Schema-based AOP support -AOPのスタイルの選択 --Spring AOP vs. AspectJ ---AOPの対象がSpringのビーンのメソッド⇒Spring AOPで十分 ---AOPの対象がSpringコンテナ管理外のDOとか、join pointがメソッド以外⇒AspectJ必要 --Spring AOP の @AspectJ vs. XML ---Java 5より前⇒XML ---XMLだと、システム内に存在するアスペクトが明確 ---XMLだと、AOPの機能がクラスとXMLに分割して書かれてしまう。(DRY原則に違反) ---XMLだと、@AspectJのように、pointcutの組み合わせを定義できない ---@AspectJをつかっていれば、AspectJに移行しやすい -Proxying mechanisms --J2SEダイナミックプロキシ ---インターフェースへのプロキシ(default) --CGILIB ---クラスへのプロキシ(インターフェースなし、インターフェース以外のメソッド) ---finalメソッドはadvise不可 ---CGLIBのライブラリが必要 ---コンストラクタが2回呼ばれる(actualとproxied) ---CGLIBの強制 <aop:config proxy-target-class="true"/> --- <aop:aspectj-autoproxy proxy-target-class="true"/> -AOP Proxyでのself-invocationについて --this参照での呼び出しではadviseは実行されない --self-invocationをしたい場合のいけてないやり方 ((Pojo) AopContext.currentProxy()).bar(); -@AspectJ Proxyのプログラマティックな生成 : AspectJProxyFactory -Using AspectJ with Spring applications TODO
-Spring AOPのJoin pintの対象はビーンのメソッド実行のみ -AOPコンセプト --Aspect --Join point --Advice --Pointcut --Introduction --Target object --AOP proxy --Weaving -AOPの選択 --Spring AOP vs AspectJ ⇒ 相互に補完 --@AspectJ スタイル vs XML スタイル -@AspctJを使う --xmlの設定 <aop:aspectj-autoproxy/> --必要なJar:aspectjweaver.jar, aspectjrt.jar -pointcut --pintcutの定義 ---pointcutにマッチするのは、pubicなメソッドのみ ---pointcut expression⇒@Pointcut ---pointcut signature⇒戻り値voidのメソッド --PCD ---execution ---within ---this ---target ---args ---@target ---@args ---@within ---@annotation ---bean (*ワイルドカード利用可) --pointcutの結合:&& , | , ! ---pointcutの結合で、@Pointcutメソッド名の可視性はJavaと同じ --executionの書き方 execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?) --PCDでは、なるべく絞り込むように記述する。⇒ weaving時のパフォーマンスがよくなる。 ---少なくともkindedとscopingを含むように。 -advise --種類 : 一番少ないコードで実装できるものを選ぶべき ---@Before(pointcut) ---@AfterReturning(pointcut,returning) -> メソッドの戻り値型のマッチング制約も同時につけられる ---@AfterThrowing(pointcut, throwing) -> 例外の型のマッチング制約も同時につけられる ---@After(pointcut) ---@Around(pointcut) --pointcutとの紐付 ---pointcut名 or pointcut表現 --join pointへのアクセス ---メソッドの第一パラメータにJoinPoint(@AroundメソッドはProceedingJoinPoint)を指定できる(任意) --pointcut 表現でargsを使って、メソッドの引数の型を明示的に指定できる @Before(XXX && args(hoge,..)) public void do(Hoge hoge){ ... } ---join pointのマッチングでパラメータの型も見てくれる。 --pointcut のargNames属性でパラメータの名前を指定してメソッドで使うことができる。 @Before(XXX, argNames="hoge") public void do(Hoge hoge){ ... } --adviceの実行順序は、優先度の高いものから「先に入って、後からでてくる」 ---優先度の設定は、org.springframework.core.Ordered を実装するか、@Order をつける -Introductions -TODO:Schema-based AOP support -AOPのスタイルの選択 --Spring AOP vs. AspectJ ---AOPの対象がSpringのビーンのメソッド⇒Spring AOPで十分 ---AOPの対象がSpringコンテナ管理外のDOとか、join pointがメソッド以外⇒AspectJ必要 --Spring AOP の @AspectJ vs. XML ---Java 5より前⇒XML ---XMLだと、システム内に存在するアスペクトが明確 ---XMLだと、AOPの機能がクラスとXMLに分割して書かれてしまう。(DRY原則に違反) ---XMLだと、@AspectJのように、pointcutの組み合わせを定義できない ---@AspectJをつかっていれば、AspectJに移行しやすい -Proxying mechanisms --J2SEダイナミックプロキシ ---インターフェースへのプロキシ(default) --CGILIB ---クラスへのプロキシ(インターフェースなし、インターフェース以外のメソッド) ---finalメソッドはadvise不可 ---CGLIBのライブラリが必要 ---コンストラクタが2回呼ばれる(actualとproxied) ---CGLIBの強制 <aop:config proxy-target-class="true"/> --- <aop:aspectj-autoproxy proxy-target-class="true"/> -AOP Proxyでのself-invocationについて --this参照での呼び出しではadviseは実行されない --self-invocationをしたい場合のいけてないやり方 ((Pojo) AopContext.currentProxy()).bar(); -@AspectJ Proxyのプログラマティックな生成 : AspectJProxyFactory -TODO:Using AspectJ with Spring applications

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。