XML autowire代理werid

时间:2015-09-03 08:47:01

标签: java spring

我有一个非常简单的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但后来不知何故消失了。这怎么可能?

1 个答案:

答案 0 :(得分:1)

您的构造函数存在缺陷。

yy = this.yy;

构造函数中的上一行完全按照它的要求执行。它将yy实例变量的值分配给传入的yy值。

但是你想要的是将传递的yy值赋给实例变量。

this.yy=yy;

您当前的实施只会破坏作业。