Java 使用不同的构造函数参数创建同一类的2个bean并使用自动连接

Java 使用不同的构造函数参数创建同一类的2个bean并使用自动连接,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,您好,我正在处理一个项目,在这个项目中,我需要创建两个相同类但不同构造函数参数的bean实例。现在只有“生产环境”的功能,所以我有如下xml文件: <context:component-scan base-package="com.xxx.yyy" /> <bean id="id1" class="someCompanySpecificURLForTheClass" scope="singleton"/> <bean name="name1" fac

您好,我正在处理一个项目,在这个项目中,我需要创建两个相同类但不同构造函数参数的bean实例。现在只有“生产环境”的功能,所以我有如下xml文件:

<context:component-scan base-package="com.xxx.yyy" /> 
    <bean id="id1" class="someCompanySpecificURLForTheClass" scope="singleton"/>

  <bean name="name1" factory-bean="id1" factory-method="createFullClient">
    <constructor-arg index="0">
        <ref bean="someJSONBean"/>
    </constructor-arg>
    <constructor-arg value="productionEnv" index="1"/>
</bean>  

</beans>
我不熟悉spring框架。谁能告诉我出了什么问题,是我的自动接线出了问题吗?我怎样才能解决这个问题

编辑: 这里,SomeCompanySpecificCurlfortheClass是同一个类,bean(name1和name2)将此bean用作具有不同构造函数参数的工厂bean。
我正在使用spring 3.1。
在搜索了很多之后,我想我可以为构造函数args值使用占位符,对吗? 上面是正在使用的已编辑的xml文件。 Java类中的更新代码: 1.

但我得到了以下错误:

ConversionNotSupportedException: failed to convert 'java.lang.string' to 'someCompanySpecificURLForTheClass'.
nested execption is IllegalStateException
Cannot convert 'java.lang.string' to 'someCompanySpecificURLForTheClass' of required type: no matching editors or conversion strategy found.
我是否错误地指定了注释值?
为什么会发生这种情况?

您必须使用
@Qualifier
注释以及e
@Autowired
。由于您正在创建同一类的两个bean,因此spring不知道将哪个bean
autowire
。您可以使用
@qualifier(“id/name”)
注释给出提示

@Autowired
@Qualifier("name1")
 //yourProperty

看看这个

如果您想将这两个bean注入到您的类中,那么您的两个bean将创建两个不同的属性,每个属性指向不同的实例

@Autowired
@Qualifer("name1")
//property1

@Autowired
@Qualifer("name2")
//property2

你们收到了什么样的错误?谢谢你们的工作!至少没有任何生成错误。但是当我通过REST客户端执行代码时,服务器启动了。我首先请求假设name1bean,然后获取数据。但当在那个会话中,只有当我向name2bean发出请求时,我才不会得到任何数据。它只在name1构造函数arg(productionEnv)中搜索。但我也在使用范围原型(尝试使用name1和name2bean的范围),但仍然是一样的。并且不能使用“请求”范围,因为它不是动态web项目,并且由于未注册此范围而出现错误。有什么问题?你说的财产到底是什么意思?我在两个java文件中对我的setClients方法进行了@Qualifier注释。假设在一个控制器类中,您需要同一类的两个不同ID w,您可以使用getter和setter创建两个文件/属性,并使用
@Autowired@Qualifer(“名称1”)
和另一个带有
@Autowired@Qualifier(“名称2”)
,以便您可以同时测试产品和测试环境。不过,如果您共享源代码,这将非常有用。在这种情况下,更改作用域不会有帮助。它是同一个类,但具有不同的构造函数参数,因此它应该使用正确的参数实例化bean。但是现在它只实例化了一个bean,并且只在向另一个bean发出请求时使用它,当我明确提到java类中的限定符时。
ConversionNotSupportedException: failed to convert 'java.lang.string' to 'someCompanySpecificURLForTheClass'.
nested execption is IllegalStateException
Cannot convert 'java.lang.string' to 'someCompanySpecificURLForTheClass' of required type: no matching editors or conversion strategy found.
@Autowired
@Qualifier("name1")
 //yourProperty
@Autowired
@Qualifier("name2")
//yourProperty
@Autowired
@Qualifer("name1")
//property1

@Autowired
@Qualifer("name2")
//property2