0

@Bean のautowireプロパティを*Autowire.BY_NAME*に設定する目的は何ですか

JavDocs を見ると、これをいつ使用するのか、または*Autowire.BY_NAME*に設定する理由がよくわかりません。

/**
 * Are dependencies to be injected via autowiring?
 */
Autowire autowire() default Autowire.NO;

で作成された既存のプロトタイプ Bean があります。

@Bean (autowire = Autowire.BY_NAME)

しかし、私はその理由を理解していません。コメントには次のように記載されています。

注: 他の Spring 構成クラスで @Autowired を使用できるようにするには、Bean 定義で Autowire.BY_NAME を明示的に設定する必要があります。

これは、@Autowired で Bean を使用できるようにするために、Bean を @Bean (autowire = Autowire.BY_NAME) に設定する必要があり、@Bean から名前で自動配線されることを意味しますか?

4

2 に答える 2

3

@Bean(autowire=Autowire.BY_NAME)は、次の xml 構成と同等です。

<bean class="Person" id="person" autowire="byName"></bean>

上記のPersonクラスを使用して作成された Bean のフィールドを「名前で」自動配線する必要があるかどうかを示します。上記のテスト Bean に say というフィールドがある場合、Spring は依存関係として注入addressする名前を持つ Bean を探します(タイプではなく) )。addressAddress

これは通常、特定のタイプのインスタンスが複数存在する可能性がある場合に使用され、名前を使用して特定のインスタンスを選択します。上記の例で、名前を持つ 2 つのアドレス Bean がaddressHomeありaddressWorkPersonクラスがname のフィールドがaddressHomeあり、そのフィールドが に設定されている場合Autowire.BY_NAME、 name の Bean がaddressHomeフィールドに設定されます。Autowire.BY_TYPE同じタイプのアドレスのインスタンスが 2 つあるため、失敗していたとしたらAddress

于 2012-10-24T01:55:43.147 に答える