【发布时间】:2016-05-30 09:15:05
【问题描述】:
如果每个 bean 都有名称,并且我们有 getBean() 方法,它接收 bean 名称,并且在 XML 配置中我们也按名称注入 bean,那么为什么在 Java 配置中我们仅限于 @Autowired 注释,它按类连接?
将 bean 从另一种配置注入一种配置的传统方法是什么?是否可以按名称引用bean而不使用@Qualifier?
更新
我找到了一种在配置之间按名称自动装配的方法。
首先我按类自动装配整个配置:
@Autowired
MySeparateConfig mySeparateConfig;
然后我只是从那个 bean 调用实例化方法:
@Bean
MyDependentBean myDependentBean() {
MyDependentBean ans = new MyDependentBean();
ans.setProperty( mySeparateConfig.myNamedBeanInDifferentConfig() );
return ans;
}
根据定义,配置属于不同的类。
【问题讨论】:
-
您不必使用
@Autowired进行注射。您可以在 context.xml 中定义您的 bean,并让 bean 通过<property>标签进行交互。 即<property name="blabla" ref="blablaref">在 bean 定义标签内。 -
@cihanseven 您的陈述是正确的,但问题是为什么
@Autowire在连接依赖关系时默认为按类? -
你有多少次拥有两个相同类但 id 不同的 bean?
-
@biziclop 我不是在寻找妻子,我在寻找理解。如果 bean 总是(或几乎总是)不同的类型,那么为什么我们在 XML 中按名称连接?
-
@Dims XML 是更古老的配置 Spring 的风格,这就是最初存在的一切。然后人们意识到很多 XML 配置是多余的,充满了
<bean id="Foo" class="com.foo.Foo"/>类型定义,所以当 Java 引入注解时,实现了自动装配以节省大部分样板配置。 XML 配置对于确实需要多个相同类型的 bean 的情况仍然有用。