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
(他に方法ないよね?)