【发布时间】:2013-07-14 02:31:11
【问题描述】:
我先提供小代码sn-p,再请教。
public class A {
private String msg;
private B b;
public A () {
System.out.println("No argument constructor is called");
}
public A (B b) {
System.out.println("Parameterized constructor is called");
this.b = b;
}
// getters and setters
}
===============================================
<bean id="a" class="A" p:msg="hello" autowire="constructor"/>
<bean id="b" class="B"/>
===============================================
输出:
调用参数化构造函数
这是正常现象,可以理解
================================================
现在,我正在添加 B 类的新 bean 定义,如下所示。
<bean id="a" class="A" p:msg="hello" autowire="constructor"/>
<bean id="b" class="B"/>
<bean id="c" class="B"/>
所以,据我所知,由于通过构造函数在内部使用“byType”进行自动装配,因此它会给出关于违反 bean 唯一性的异常,例如,如果我使用 autowire="byType",就会出现这种情况。
但奇怪的是,输出如下。
输出:
没有调用参数构造函数
==========================================
但是,请注意,如果没有在类 A 中指定默认构造函数,那么就会发生预期的异常。那么,这是 Spring IoC 容器的默认行为吗?如果是,请详细解释一下。
提前谢谢你。
这个问题也可以在 LinkedIn (Spring autowiring through constructor ambiguity) 中找到
【问题讨论】:
标签: java spring dependency-injection inversion-of-control autowired