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)

但我不明白为什么。评论仅说明:

注意:我们必须在 bean 定义中显式设置 Autowire.BY_NAME 才能在其他 spring 配置类中使用 @Autowired

这是否意味着我们必须将 bean 设置为 @Bean (autowire = Autowire.BY_NAME) 以便能够将 Bean 与 @Autowired 一起使用,并且它将通过来自 @Bean 的名称自动装配?

4

2 回答 2

3

@Bean(autowire=Autowire.BY_NAME)相当于这个 xml 配置:

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

这表明使用上述Person类创建的 bean 是否需要在“按名称”中自动装配其字段 - 如果上面的测试 bean 有一个字段 say address,Spring 将寻找一个具有名称的 beanaddress作为依赖项注入(而不是按类型Address)。

如果可能有超过 1 个特定类型的实例,则通常使用此方法,然后您将使用名称选择特定实例 - 再次考虑上面的示例,如果有两个具有 names 的地址 bean addressHomeaddressWork并且如果Personclass有一个名为 name 的字段addressHome并将其设置为Autowire.BY_NAME,具有 name 的 beanaddressHome将设置为该字段。如果是Autowire.BY_TYPE这样,它就会失败,因为有两个相同类型的地址实例Address

于 2012-10-24T01:55:43.147 回答
0
As @Bean (autowire = Autowire.BY_NAME) is deprecated.

没有语法替代方案,Autowire by Name 被理解。您只需提供与@Bean 方法名称或@Component 名称相同的名称。

于 2021-07-28T08:33:56.283 回答