私が本当に欲しいものを説明するのは難しいです。私はクラスの変数のすべてのランタイムデバッグ情報を提供するメソッドgetRuntimeInfo()
を持つインターフェイスを持っています。私はこのインターフェイスを実装するすべてのクラスのリストを見たいと思います。私はJavaとSpringを使用しています。 これを行うには、Spring ContextからすべてのBeanを取得し、instanceof
演算子を使用してチェックする方法があります。しかし、明らかなパフォーマンスへの影響を避けるためには、そうしたくはありません。他の選択肢がありますか?特定のインターフェイスを実装するすべてのクラスを追跡しますか?
8
A
答えて
13
何:
@Component
public class WithAllMyInterfaceImpls {
@Autowire
List<MyInterface> allBeansThatImplementTheMyInterface;
}
一覧はのみ()起動時に一度読み込まれるので、「通常の」実行時のパフォーマンスに大きな影響を与えるべきではありません。
コメント:
あなたのコード
を説明することができますが、春はIOCコンテナである知っています。 @Component
は、このクラスのインスタンスを作成する必要があることをSpringに通知します(いわゆるSpring Managed Bean)。 IOCは、コンテナが他のインスタンス(Spring Managed Bean)への参照を挿入する責任があることも意味します。 (そして@Resource
と@Inject
も同様です)は、SpringにこのフィールドがSpringによって読み込まれるように指示するような注釈です。 Spring自体は、フィールドにどのインスタンスを設定するかを把握しようとします。 Springが使用するデフォルトのテクニックはby type
です。これは、Springがフィールドの型を検査し、一致するBeanを検索することを意味します。あなたの場合、それは一般的なリストです - これはちょっと特殊です。この場合、Springはフィールドをリストで埋め込みます。ここで、要素はジェネリック型と一致するすべてのBeanです。
2
ApplicationContextのgetBeansOfTypeメソッドはどうでしょうか?あなたのインターフェースを実装するBeanのMapを返しますか?このソリューションについて
関連する問題
- 1. 特定のインターフェイスを実装しているすべてのクラスをインスタンス化します
- 2. インターフェイスを実装する特定のクラスのリストを持っています
- 3. インターフェイスを実装するすべてのクラスに属性を追加する
- 4. インターフェイスを実装するすべてのクラスを呼び出す
- 5. Javaのインターフェイスの特定の実装クラスを呼び出す
- 6. インターフェイスを実装するすべてのクラスを取得できますか?
- 7. 既知のインターフェイスを実装する未知のクラスの特定のインスタンスに拡張メソッドを追加します。
- 8. NUnit - 特定のインターフェイスを実装するすべてのクラスをテストする方法
- 9. WinRTで特定のインターフェイスを実装するすべてのクラスを取得する
- 10. クラスデザイン:別のインターフェイスを実装しているインターフェイスを実装しているクラス
- 11. インターフェイスを実装するすべてのクラスを発見してください
- 12. すべてのメソッドとクラスを追跡
- 13. 特定のインターフェイスを実装し、メソッドを実行するクラスを検索します。
- 14. クラスはクラスを拡張してインターフェイスを実装できます
- 15. インターフェイスを実装するTypeScriptクラスのプライベートメソッド
- 16. 特定の抽象クラスを実装するすべてのクラスを取得します。
- 17. PhpStorm:すべてのクラスで新しいインターフェイス関数を実装する
- 18. クラスが特定のインターフェイスを実装しているかどうかを確認する
- 19. テンプレートを使用してインターフェイスを実装するクラスのテンプレート
- 20. インターフェイスの実装クラスの型パラメータを設定するには?
- 21. すべての実行中のブロックを追跡します
- 22. 一部のインターフェイスを実装するすべてのサービスを入力します。
- 23. /flexとして、特定のインターフェイスを実装するパッケージ内のすべてのクラスを見つけることは可能ですか?
- 24. Typescriptで実装されている抽象クラスとインターフェイスが、インターフェイス内のすべてのメソッドを実装する必要があるのはなぜですか?
- 25. デバッグ中に特定のインターフェイスを実装するタイプのすべてのインスタンスを見つける方法
- 26. Serializableインターフェイスを実装するクラスがインターフェイスのメソッドを実装しない理由を教えてください。
- 27. 指定されたインターフェイスを実装するすべてのクラスを取得する方法
- 28. カスタムScrollViewクラスを使用してインターフェイスを実装する - Android
- 29. クラスを実装するコンストラクタでインターフェイス定数を使用
- 30. 特定のプロセスを実行しているPHPスクリプトを追跡するには?
これは通常の春のオートワイヤリング機能ですが、特別なことは何もありません。それはちょうど中心の春の機能です – Ralph
@ user1117398:私はそれを少し説明するために私の答えを拡張しました。 - あなたはSpring 3.0を読むべきですね! 3.1チュートリアルを参照してください。 – Ralph