load-time weavingで広がるaopの 可能性 · –eclipseで学ぶはじめてのjava...
TRANSCRIPT
![Page 1: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/1.jpg)
Load-time weavingで広がるAOPの可能性
1
![Page 2: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/2.jpg)
自己紹介
• 名前:木村 聡(きむら さとし)
• Seasarプロジェクトコミッタ:
– S2Struts
– S2Mai
–舞姫
• 仕事
– (株)フルネス
– フレームワーク
–自動生成ツール2
![Page 3: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/3.jpg)
これまで書いたものとか
• 書籍:– Eclipseで学ぶはじめてのJava– Seasar入門 ~はじめてのDI&AOP~
• 雑誌、Web記事– CodeZine– DB Magazine– WEB+DB
• 「Seasar2徹底攻略」 (Vol.31)
– JavaWorld• 「開発者にとって“易しく、優しい”軽量コンテナ
Seasar2の実力を探る」 (2005/05)
3
![Page 4: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/4.jpg)
はじめに
• AOPの乱用禁止
4
![Page 5: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/5.jpg)
AOPとは• Aspect Oriented Programの略• 日本語では「アスペクト指向プログラム 」
• ソフトウェアの複雑さの低減や再利用性を向上させる
• よく使われる機能– ログ– 例外処理– トランザクション– 認証処理– RPC– 障害対応
• S2プロダクトだと– S2Dao 5
![Page 6: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/6.jpg)
簡単に言うと
• AOPの仕組みを使うと、
後から機能や処理を挿入することができるようになる
6
![Page 7: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/7.jpg)
例
public String hello(String arg) {Strimg message = "Hello " + arg;System.out.println(message);return message;
}
実行
Hello World
7
![Page 8: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/8.jpg)
例
public String hello(String arg) {Strimg message = "Hello " + arg;System.out.println(message);return message;
}
AOP使って実行
2009-03-14 17:00.00 BEGIN hello("World")Hello World2009-03-14 17:00.01 END hello("World") : "Hello World"
+設定ファイルなど
8
![Page 9: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/9.jpg)
AOPのメリット
• 生産性の向上
–共通処理を記述しなくても良い
• 品質の向上
–共通処理の埋め込み忘れが減る
• アノテーションの処理を組み込みやすい
9
![Page 10: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/10.jpg)
よく見かける文章
• AOPを使って、
アプリケーションのソースコードを一切変更することなく、○○します。
10
![Page 11: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/11.jpg)
Struts Only
このStrutsで作られたシステムにAOPでTraceを出してくれ
11
![Page 12: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/12.jpg)
Struts Only
将軍様Seasarで作り直してくださいそうしたら出来ます
12
![Page 13: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/13.jpg)
AOPは適用が難しい
• クラスの書き換えが必要
– コンパイル時に書き換える
• ツール/文法が難しい
– Java以外の言語、ツールを覚える必要がある
• AspectJとか
13
![Page 14: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/14.jpg)
これまでの条件
• SeasarなどAOPの仕組みが提供されているフレームワークを使っていれば出来る
• AspectJなどを使う場合、コンパイルし直せば出来る
• AOPとDIコンテナは相性が良い
– DIコンテナのメリット
14
![Page 15: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/15.jpg)
深いところには手が届かない
• Strutsとかライブラリの中のクラス
– ライブラリもコンパイルしなおせばOK
15
![Page 16: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/16.jpg)
現在は
• できます
16
![Page 17: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/17.jpg)
Demo
17
![Page 18: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/18.jpg)
Demo
18
• S2のUtilクラスのシーケンス図をS2Javelinで出力
![Page 19: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/19.jpg)
内部的には
• バイトコードエンジニアリング
• Java5から動的にバイトコードを操作するための枠組みが提供されるようになった
– - javaagent
• クラスロード時に操作可能– 実行時、コンパイル時ではなく
• JavaRebel
• Pleiades19
![Page 20: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/20.jpg)
できること
• メソッドに仕掛ける
– privateも
– final,staticも
• コンストラクタに仕掛ける
20
![Page 21: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/21.jpg)
基本スペック
• AOP Alliance○ MethodInterceptor
○ ConstructorInterceptor
× FieldInterceptor
• Java標準– javax.interceptor.○ AroundInvoke(AOP AllianceのMethodInterceptor)
○ InvocationContext(AOP AllianceのInvocation)
○ ExcludeClassInterceptors
× Interceptors21
![Page 22: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/22.jpg)
こんな時に使える
• バグFix
• 深い場所にあるクラスのログなど
• デバッグ時のtoString
–個人の生産性を高める
• Unitテスト
–戻り値や引数を強引に変更
• キャッシュ
22
![Page 23: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/23.jpg)
こんな時に使える
• バグFix
– ライブラリのバージョンを上げたい
• でも、アプリのコードがコンパイルエラーになるので見送り
• 部分的なパッチを作りAOPで対応• アプリのコードが影響の出ないようにできる 23
![Page 24: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/24.jpg)
使用方法
1. jarを配置
2. java のオプション指定
java -javaagent:kimu-aop-core.jar foo.bar.Main
3. 設定ファイルを用意
24
![Page 25: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/25.jpg)
設定ファイル解説• 基本
– ファイル名:aspect.xml
– Seasar2のdiconファイルを意識
<aspect-config><def target="org.apache.struts.Action"><aspect>
new jp.dodododo.aop.interceptors.TraceInterceptor()</aspect>
</def></aspect-config>
対象となるクラスを指定
機能(TraceInterceptorは、ログ)
25
![Page 26: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/26.jpg)
設定ファイル解説
• 正規表現で指定
<aspect-config><def target="jp.co.foo.bar.*ServiceImpl"><aspect>
new jp.dodododo.aop.interceptors.TraceInterceptor()</aspect>
</def></aspect-config>
正規表現も可能
26
![Page 27: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/27.jpg)
設定ファイル解説
• メソッドの指定
<aspect-config>
<def target="jp.co.foo.bar.*ServiceImpl">
<aspect pointcut="execute,toString">
new jp.dodododo.aop.interceptors.TraceInterceptor()</aspect>
</def>
</aspect-config>
pointcutで指定
・指定しない場合は、implメソッド・Genericsも対応
27
![Page 28: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/28.jpg)
設定ファイル解説
• メソッドの指定
<aspect-config>
<def target="jp.co.foo.bar.*ServiceImpl">
<aspect pointcut=".*">
new jp.dodododo.aop.interceptors.TraceInterceptor()</aspect>
</def>
</aspect-config>
正規表現も可能
28
![Page 29: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/29.jpg)
設定ファイル解説
• メソッドの指定
<aspect-config>
<def target="jp.co.foo.bar.*ServiceImpl">
<aspect pointcut=".*" not="toString,hashCode">
new jp.dodododo.aop.interceptors.TraceInterceptor()</aspect>
</def>
</aspect-config>
notで除外
29
![Page 30: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/30.jpg)
設定ファイル解説
• アクセス修飾子の指定
<aspect-config>
<def target="jp.co.foo.bar.*ServiceImpl">
<aspect modifier="private">
new jp.dodododo.aop.interceptors.TraceInterceptor()</aspect>
</def>
</aspect-config>
・modifierで指定・指定した修飾子以上
・public(デフォルト)・protected
・package-private
・private30
![Page 31: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/31.jpg)
設定ファイル解説
• Interceptorの指定
<def target="jp.co.foo.bar.*ActionImpl"><aspect>new jp.dodododo.aop.interceptors.TraceInterceptor()
</aspect></def>
<def target="jp.co.foo.bar.*ServiceImpl"><aspect>jp.dodododo.aop.interceptors.TraceInterceptor.getInstance()
</aspect></def>
Javaのコードを1ステートメントで記述
31
![Page 32: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/32.jpg)
設定ファイル解説
• 優先度
<aspect-config><def target="jp.co.foo.bar.BazServiceImpl"><aspect>new jp.dodododo.aop.interceptors.SimpleTraceInterceptor()
</aspect></def><def target="jp.co.foo.bar.*ServiceImpl"><aspect>
new jp.dodododo.aop.interceptors.TraceInterceptor()</aspect>
</def></aspect-config>
・上に書いてある方が優先
32
![Page 33: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/33.jpg)
設定ファイル解説
• 優先度
<aspect-config>
<def target="org.apache.log4j.*" />
<def target="jp.co.foo.bar.*ServiceImpl"><aspect>
new jp.dodododo.aop.interceptors.TraceInterceptor()</aspect>
</def></aspect-config>
・AOP対象外
33
![Page 34: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/34.jpg)
特定のメソッドを対象外にする
• Seasar2だと
– finalメソッドにする
– Interfaceからメソッドを除く
– pointcutで頑張る
public final String hello(String arg) {Strimg message = "Hello " + arg;System.out.println(message);return message;
}
34
![Page 35: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/35.jpg)
特定のメソッドを対象外にする
• kimu-aop
– Enhanceアノテーションで指定
– ExcludeClassInterceptorsアノテーションで指定
– (notで指定)
@Enhance(false)public String hello(String arg) {
Strimg message = "Hello " + arg;System.out.println(message);return message;
}
無限ループしないように自作のインターセプタとかに付ける
35
![Page 36: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/36.jpg)
特定のメソッドを対象外にする
• kimu-aop
– Enhanceアノテーションで指定
– ExcludeClassInterceptorsアノテーションで指定
– (notで指定)
@ExcludeClassInterceptorspublic String hello(String arg) {
Strimg message = "Hello " + arg;System.out.println(message);return message;
}36
![Page 37: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/37.jpg)
用意しているInterceptor
• お約束(S2AOPと同じ)
–ログ系
• TraceInterceptor
• SimpleTraceInterceptor
• ThrowsInterceptor– TraceThrowsInterceptor
–同期
• SyncInterceptor
37
![Page 38: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/38.jpg)
用意しているInterceptor
• 独自
– TraceWithCustomLoggerInterceptor
– TakeOverInterceptor
• CommonsBuilderInterceptor
• ToStringInterceptor
• CloneInterceptor
38
![Page 39: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/39.jpg)
TraceWithCustomLoggerInterceptor• クラス単位でTraceログの設定が可能
– log4j.properties
39
![Page 40: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/40.jpg)
TakeOverInterceptor
• Interceptorに定義しているメソッドにシグネ
チャが同じメソッドがあれば、そのメソッドを実行
40
![Page 41: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/41.jpg)
CommonsBuilderInterceptor• Objectクラスメソッドの実装
public class CommonsBuilderInterceptorextends TakeOverInterceptor {
public String toString() {Object target = getThis();return ToStringBuilder.reflectionToString(target);
}public int hashCode() {Object target = getThis();return HashCodeBuilder.reflectionHashCode(target);
}public boolean equals(Object obj) {Object target = getThis();return EqualsBuilder.reflectionEquals(target, obj);
}} 41
![Page 42: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/42.jpg)
ToStringInterceptor
• 配列などに対応
42
![Page 43: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/43.jpg)
CloneInterceptor
• シリアライズ、デシリアライズ
43
![Page 44: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/44.jpg)
S2AOPとの違い
• エンハンスしたクラス
– S2AOP:対象のクラスを継承したクラス
– KimuAop:対象のクラスそのもの• ターゲットのクラス取得の作法が異なる(独自のInterceptorを作る場合に注意かも)
• InterceptorはSingletonでない– 定義時にgetInstance()とか書けばOK
• インターフェースをそのままインスタンス化できない
– ex:S2Dao
44
![Page 45: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/45.jpg)
今後
• Unitテスト用の仕組みを提供
– (今もあるけど、変更する予定)
45
![Page 46: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/46.jpg)
プロダクト情報
• 名前
– Kimu-aop
• URL
– http://code.google.com/p/kimu-aop/
46
![Page 47: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/47.jpg)
まとめ
• AOPの乱用禁止
• kimu-aop
–ほぼ何でも出来る
• いままでリーチできなかったクラスにリーチ
– S2AOPとの違いに注意
47
![Page 48: Load-time weavingで広がるAOPの 可能性 · –Eclipseで学ぶはじめてのJava –Seasar入門~はじめてのDI&AOP~ •雑誌、Web記事 –CodeZine –DB Magazine](https://reader034.vdocuments.pub/reader034/viewer/2022042307/5ed312468f95061e5c51ceb6/html5/thumbnails/48.jpg)
終わり
• ご清聴ありがとうございました
48