Java 自动关联构造函数中的单个参数

Java 自动关联构造函数中的单个参数,java,spring,spring-bean,Java,Spring,Spring Bean,在具有两个参数的构造函数中,我希望显式连接一个参数,并自动连接另一个参数 比如: public Obj(Interface arg, Interface arg2) { // stuff } 在bean定义中: <bean id="objImpl" class="com.work.Obj"> <constructor-arg index="0" ref="interfaceImpl"/> <constructor-arg index="1"

在具有两个参数的构造函数中,我希望显式连接一个参数,并自动连接另一个参数

比如:

public Obj(Interface arg, Interface arg2) {
    // stuff
}
在bean定义中:

<bean id="objImpl" class="com.work.Obj">
    <constructor-arg index="0" ref="interfaceImpl"/>
    <constructor-arg index="1" autowire-this-somehow/>
</bean>

有人知道路吗?

试试这个:

<bean id="objImpl" class="com.work.Obj" autowire="constructor">
    <constructor-arg index="0" ref="interfaceImpl"/>
</bean>
和Obj等级:

package stackoverflow;

public class Obj {
    public Obj(SomeInterface i1, SomeInterface i2){
        System.out.println("i1" + i1);
        System.out.println("i2" + i2);
    }
}
这里
SomeImpl实现了SomeInterface
。在运行
impl2
时,bean自动连接到第二个构造函数arg
i2
。第一个参数是在Spring配置中手动提供的。

尝试以下操作:

<bean id="objImpl" class="com.work.Obj" autowire="constructor">
    <constructor-arg index="0" ref="interfaceImpl"/>
</bean>
和Obj等级:

package stackoverflow;

public class Obj {
    public Obj(SomeInterface i1, SomeInterface i2){
        System.out.println("i1" + i1);
        System.out.println("i2" + i2);
    }
}

这里
SomeImpl实现了SomeInterface
。在运行
impl2
时,bean自动连接到第二个构造函数arg
i2
。第一个参数是在Spring config中手动提供的。

是什么阻止了您使用ref?为什么不自动连接另一个参数呢?我不想在这个问题中讨论这个问题,因为它太长了。所以我只想说,因为遗留项目代码,因为糟糕的设计,等等等等…我现在需要的是一个肮脏丑陋的黑客,这就是我要问的:)是什么阻止你使用ref?为什么不自动连接另一个呢?我不想在这个问题上讨论这个问题,因为它太长了。所以我只想说,因为遗留项目代码,因为糟糕的设计,等等等等…我现在需要的是一个肮脏丑陋的黑客,这就是我想要的:)还有,当第二个参数有两个可能的值时,如何自动连接它:
interfaceeimpl
(第一个参数已经使用的值)和
someOtherInterfaceImpl
?@andResteFan正如我提到的
Spring在发现多个与构造函数arg匹配的bean时,不会尝试猜测自动连接哪个bean,您将得到一个异常。如果您愿意,您可以在那些您确定不需要自动连线的bean上设置
autowire-candidate=false
。我知道,这就是为什么我要指出您提供的解决方案实际上不是一个解决方案。对于您的代码,将有一个例外情况。@andrestefan正如我在上面的评论中提到的那样-所有类型为
Interface
的bean(需要自动连接的除外)都应标记为
autowire-candidate=“false”
,以便Spring只能选择一个bean作为合适的候选bean。我知道,这很混乱,但这就是Simeon所问的:)当第二个参数有两个可能的值时,如何自动关联第二个参数:
interfaceImpl
(该值已用于第一个参数)和
someOtherInterfaceImpl
?@andResteFan正如我提到的
Spring在发现多个与构造函数arg匹配的bean时,不会尝试猜测自动连接哪个bean,您将得到一个异常。如果您愿意,您可以在那些您确定不需要自动连线的bean上设置
autowire-candidate=false
。我知道,这就是为什么我要指出您提供的解决方案实际上不是一个解决方案。对于您的代码,将有一个例外情况。@andrestefan正如我在上面的评论中提到的那样-所有类型为
Interface
的bean(需要自动连接的除外)都应标记为
autowire-candidate=“false”
,以便Spring只能选择一个bean作为合适的候选bean。我知道,这很混乱,但这正是西蒙所问的:)