@Bean(autowire = Autowire.BY_NAME)

时间:2012-10-24 00:54:49

标签: spring

@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中的名称自动装配?

2 个答案:

答案 0 :(得分:3)

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

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

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

如果某个特定类型的实例可能超过1个,则通常使用此选项,然后使用名称选择特定实例 - 如果有两个名称为{的地址bean,请再次考虑上面的示例{1}},addressHome如果addressWork类的字段名为Person且字段设置为addressHome,则将设置名为Autowire.BY_NAME的bean到了现场。如果它是addressHome它会失败,因为有两个相同类型的地址实例Autowire.BY_TYPE

答案 1 :(得分:0)

As @Bean (autowire = Autowire.BY_NAME) is deprecated.

没有语法替代方案,可以理解按名称自动装配。 您只需要提供与@Bean 方法名称或@Component 名称相同的名称。