JavaでもAOPしてみる(AspectJ使ってみた)
最新のver1.5.4を試してみました。
AspectJのQuick Start的なものは、下記サイトに良くまとまっています。
http://www.02.246.ne.jp/~torutk/aspectj/helloworld.html
3/24追記: 良く見たらLTW(Load Time Weaving)についても書いてありますね。
ただ、アノテーションと設定ファイルの両方が必要ってのはイマイチかもなぁ。
AspectJ派の反論を待ちたいところです。
読んでみたところ、AspectJ言語なる独自言語でげんなり。Java5以降なら、アノテーションで頑張れるらしい。なんとかなるかも?また、
アスペクトをコンパイルするときは、ajc(AspectJコンパイラ)コマンドを使用します。ajcコマンドを使うときは、アスペクトを記述したソースファイル(ここではTrace.aj)と、アスペクトを織りこむ対象となるソースファイル(ここではHelloWorld.java)の両方を一緒に指定します。
ということなので、Javaの既存のクラス(昨日の例で言えば、java.util.Dateとか)には使えないということになります。またまたげんなり。
極めつけは、何回やっても
C:\aspectj1.5>java -classpath classes hello.HelloWorld Exception in thread "main" java.lang.NoClassDefFoundError: org/aspectj/lang/NoAs pectBoundException at hello.HelloWorld.main(HelloWorld.java:12) C:\aspectj1.5>
で落ちるので、おっかしいなあと思ってたのですが、なんのことはない、aspectjrt.jarがないとダメなのでした。
というわけでランタイムライブラリも要らないかと思いきゃ、結局必要になるというわけでやっぱりげんなり。