试试这个:
<bean id="objImpl" class="com.work.Obj" autowire="constructor">
<constructor-arg index="0" ref="interfaceImpl"/>
</bean>
在这里,你已经指定了com.work.Obj
类型的bean应当使用创建的自动装配构造。如果您指定了任何构造函数arg,那么它将覆盖自动装配参数。所以索引0是明确提供的。其他未明确提供的参数将按类型自动布线。
注意:构造自动装配有相同的限制,byType
- 春天不会试图去猜测当它找到匹配的构造精氨酸,多种bean自动装配哪个Bean。此外,如果类有多个构造函数,其中任何一个都可以通过自动装配来满足,那么Spring将不会尝试猜测使用哪个构造函数。在这种情况下你会得到一个例外。
编辑:对于这项工作,类型Interface
(构造ARG型)的其它豆类除了一个需要被自动连接,应注明autowire-candidate=false
实施例:
<bean id="impl1" class="stackoverflow.SomeImpl" autowire-candidate="false"/>
<bean id="impl2" class="stackoverflow.SomeImpl"/>
<bean id="obj" class="stackoverflow.Obj" autowire="constructor">
<constructor-arg index="0" ref="impl1"/>
</bean>
和Obj类:
package stackoverflow;
public class Obj {
public Obj(SomeInterface i1, SomeInterface i2){
System.out.println("i1" + i1);
System.out.println("i2" + i2);
}
}
这里SomeImpl implements SomeInterface
。运行时impl2
bean在第二个构造函数arg i2
中自动装配。第一个参数是在Spring配置中手动提供的。
来源
2014-07-24 11:31:55
Pat
什么阻止你使用ref? – hutingung
为什么不自动连接另一个呢? –
我不想在这个问题中想到这个问题,因为它太长了。所以我只是说,因为遗留项目代码,因为糟糕的设计,嘘嘘bla ... – Simeon