【发布时间】:2016-12-05 10:00:36
【问题描述】:
我知道如何创建和使用两个相同类型的 Spring bean 的问题之前已经回答过,并且我已经阅读了一些关于 @Qualifier 和 @Resource 的内容,但我看到的所有答案都是在自动装配的情况下。在我的情况下,我尝试使用 bean 的地方位于配置文件的另一部分,所以我不确定解决方案的哪些部分适用。我还有一个案例是我们正在以多种方式进行配置(xml 配置文件和带有 @Configuration 注释的 java 文件。这是代码的样子
import com.this.that.AuthProvider;
@Configuration
...
@Bean
public AuthProvider buildAuthProvider() {
return new AuthProvider(someotherbean);
}
@Bean
public MyConnectionManager buildMyConnectionManager(AuthProvider authProvider) {
return new MyConnectionManager(authProvider);
}
...
另一个spring config xml文件导入application-config.xml
<bean id="MyAuthProvider" class="com.this.that.AuthProvider">
<constructor-arg type="java.lang.String" ref="somedifferentbean" />
</bean>
<bean id="MyClient" class="com.that.this.MyClient">
<constructor-arg type="com.this.that.AuthProvider"
ref="MyAuthProvider" />
</bean>
当我这样做时,尝试在 Java 配置文件中创建 MyConnectionManager 时出错。错误在构造函数 arg 上,带有以下信息) org.springframework.beans.factory.UnsatisfiedDependencyException .. (excpected single bean but found 2: MyAuthProvider, buildMyConnectionManager())
我还在这里看到另一个 bean 引用 AuthProvider 类,但它不只是将其指定为 bean 构造函数的参数,而是使用无参数构造函数并使用“buildAuthProvider()”方法创建一个新的 AuthProvider。我没有看到任何关于该问题或在 xml 文件中创建的 bean 的投诉,但我不确定此错误是否只是掩盖了其他错误。
有人可以帮我弄清楚如何拥有这两个独立的豆子吗?它们是使用传递给构造函数的不同值创建的,因此在这种情况下我不能重用同一个 bean。
【问题讨论】:
标签: java xml spring configuration javabeans