我有一个非常简单的Spring项目。只有2个豆子:
public class BeanX {
private BeanY yy;
public BeanX(BeanY yy){
System.out.println("yy:"+ yy);
yy = this.yy;
}
public BeanY getYy() {
return yy;
}
}
和
public class BeanY {
}
我的上下文如下:
<bean id="yy" class="com.paweljarosz.BeanY"/>
<bean id="xx" class="com.paweljarosz.BeanX">
<constructor-arg name="yy" ref="yy"/>
</bean>
最后我使用
运行应用程序public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("application-context.xml");
BeanX xx = ctx.getBean("xx",BeanX.class);
System.out.println(xx.getYy());
}
由于某种原因,控制台输出是:
YY:com.paweljarosz.BeanY@3dd4520b
空
这意味着注入了yy bean但后来不知何故消失了。这怎么可能?
答案 0 :(得分:1)
您的构造函数存在缺陷。
yy = this.yy;
构造函数中的上一行完全按照它的要求执行。它将yy
实例变量的值分配给传入的yy
值。
但是你想要的是将传递的yy
值赋给实例变量。
this.yy=yy;
您当前的实施只会破坏作业。