@Target(value=METHOD)
@Retention(value=RUNTIME)
@Documented
public @interface Lookup
getBean
呼び出しのために BeanFactory
にリダイレクトして戻されます。これは本質的に XML lookup-method
属性のアノテーションベースのバージョンであり、同じ実行時の配置になります。 ターゲット Bean の解決は、戻り値の型(getBean(Class)
)または推奨される Bean 名(getBean(String)
)に基づいて行うことができます。どちらの場合も、メソッドの引数を getBean
呼び出しに渡して、ターゲットファクトリメソッド引数またはコンストラクター引数として適用します。
このようなルックアップメソッドには、コンテナーによって単純に置き換えられるデフォルト(スタブ)実装を含めることができます。あるいは、コンテナーを実行時に埋め込むために、抽象として宣言することもできます。どちらの場合も、コンテナーは CGLIB を介してメソッドを含むクラスのランタイムサブクラスを生成します。そのため、このようなルックアップメソッドは、コンテナーが通常のコンストラクターを通じてインスタンス化する Bean でのみ機能します。つまり、ルックアップメソッドは、ファクトリメソッドから返された Bean で置き換えられません。それらにサブクラスを動的に提供することはできません。
一般的な Spring 構成シナリオでの具体的な制限 : 抽象 Bean をフィルターで除外するコンポーネントスキャンまたはその他のメカニズムで使用する場合は、ルックアップメソッドのスタブ実装を提供して、具象クラスとして宣言できるようにします。また、ルックアップメソッドは、構成クラスの @Bean
メソッドから返された Bean では機能しないことに注意してください。代わりに @Inject Provider<TargetBean>
などを使用する必要があります。
BeanFactory.getBean(Class, Object...)
, BeanFactory.getBean(String, Object...)
修飾子と型 | オプションの要素と説明 |
---|---|
java.lang.String | value このアノテーション属性は、検索するターゲット Bean 名を提案する場合があります。 |