将 @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中的名称自动装配?
答案 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 名称相同的名称。