Hatena::ブログ(Diary)

Yamashiro0217の日記 RSSフィード

2008-11-28

JavaでAnnotationがついたクラスがあったら、それに対して処理したい

18:24 | JavaでAnnotationがついたクラスがあったら、それに対して処理したいを含むブックマーク

JavaであるAnnotation(アノテーション)がついたクラスがあったら、それに対して処理したい。
あるいは、ある命名規則に合致するクラスがあったら、それに対して処理した。


そんなことを思ったことのあるJavaプログラマーは、吐いて捨てるほどいると思いますがいかがお過ごしでしょうか。


こう考えるのは Java 初心者ですよ!

  • リフレクションでごにょごにょすればいいんだよね。
  • クラスローダーからもってくればよくね。


アウト。



java.lang.Class から Package クラス取得して・・・


Package#getClasses なんてありませんよ!


クラスローダーを再帰的にたどって、ロードされてるクラスを全部取得して・・・
Package#getClasses がない理由と同様です。無理です。


Java のクラスロードの仕組みについて立ち戻って思い出してください。
そう。Java のクラスローダーはクラスが必要になったときに、ロードを始める。
だから、PackageにgetClassesはありません。そのパッケージに含まれるクラスが分からないから。
クラスローダーも同様ですよね。


「でも、Seasar とか Hibernate とかクラスにアノテーションがついてると動作が違うじゃない。」
えぇ。そうですね。


ファイルシステムまたは Jar ファイルを全走査してクラスロードしてください。


が結論です。


Seasar だったら、
org.seasar.framework.util.ClassTraversal
を読むべし。


こんな偉そうなことかいてますが、僕は Java 初心者でした。サーセンwwwwwwwwwww
(他に方法ないよね?)

daisuke-mdaisuke-m 2008/11/28 19:04 ロード済みもしくはロード可能なクラスのうち、特定の条件を満たしたクラスのリストアップを行ってくれるライブラリ、作ってくだしあ><

shot6shot6 2008/11/30 11:42 S2でもそうだけど、ファイルシステムまたはjarからのロードは
各APサーバごとに独自プロトコルもってたりしてめんどいすねえ。
WebLogicならzip、WASならwsjarなどなど。


ちなみに獄長のClassTraversalは凄いのでおすすめです。
見とくべき。

takeshi-kondotakeshi-kondo 2008/12/01 12:53 WebBeansのRIで使われているscannotationってライブラリもいいですよ。アノテーションが付いているクラスの一覧を取ってくるだけのライブラリでシンプルで使いやすい。

takeshi-kondotakeshi-kondo 2008/12/01 12:53 WebBeansのRIで使われているscannotationってライブラリもいいですよ。アノテーションが付いているクラスの一覧を取ってくるだけのライブラリでシンプルで使いやすい。

Connection: close