C# では、特定のアセンブリからすべてのクラスを簡単に読み取ることができます。
Javaで同等の機能を探しています。これは、EJB Bean を Guice モジュールに自動的にバインドするために必要です。
C# では、特定のアセンブリからすべてのクラスを簡単に読み取ることができます。
Javaで同等の機能を探しています。これは、EJB Bean を Guice モジュールに自動的にバインドするために必要です。
残念ながら、Java ですぐに使用できるソリューションはないようです。
私たちのプロジェクトでは、いくつかのブログで提案されたわずかに変更されたアプローチを使用しました。そこで説明されている解決策は、クラスのファイル システムと JAR をスキャンすることです。
何らかのインターフェースを実装するクラスのみを選択したい場合は、 のような追加のチェックを行うことができますclazz.isAssignableFrom(MyInterface.class)
。
アセンブリに相当する Java は JAR ファイルです。JAR ファイルの内容は、 のクラスを使用して一覧表示できますjava.util.jar
。
Java クラスローディングメカニズムは非常に柔軟で、HTTP 経由でロードされたクラスやオンザフライで生成されたクラスなどを許可するため、一般的なメカニズム (パッケージ内のすべてのクラスを取得するなど) はありません。そのため、利用可能なすべてのクラスを知ることは不可能です。
ライトウェイト Java フレームワークである Snow で使用しましたが、うまく機能します。
Mavenは次のようなものです
<dependency>
<groupId>com.metapossum</groupId>
<artifactId>metapossum-scanner</artifactId>
<version>1.0.1</version>
</dependency>