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
を読むべし。