使用构造函数args和refs从bean实例化对象

时间:2013-08-28 17:31:47

标签: java spring

我有一个接受2次物体进样的课程。其中1个是通过其他bean ref注入而另一个是基于bean调用注入的。我想用spring实例化一个对象。我怎么能这样做?

我试过这样做:

MyBean Class:

class MyBean{
    Injection1 ijn1;
    MyBean(Injection1 ijn1,Injection2 ijn2){
      this.ijn1=ijn1;
      this.ijn2=ijn2;
    }
}

的beans.xml

<bean name="myBean" class="MyBean" scope="prototype">
    <constructor-arg>
        <null />
    </constructor-arg>
    <constructor-arg>
        <ref bean="injection2" />
    </constructor-arg>
</bean>


<bean name="injection2" class="Injection2">
</bean>

申请代码:

MyBean getMyBean(Injection ijn1) {
    return (MyBean)context.getBean("myBean", new Object[] { ijn1 })
}

但这不起作用。

任何提示?

1 个答案:

答案 0 :(得分:1)

你的代码不起作用,因为spring会查找像MyBean这样的MyBean(Injection1 ijn1)构造函数;你必须以这种方式传递injection2

MyBean getMyBean(Injection ijn1) {
    return (MyBean)context.getBean("myBean", new Object[] { ijn1, context.getBean("injection2") })
}

如果您想使用您的代码,另一种方法是以这种方式进行部分注入:

class MyBean{
    Injection1 ijn1;
    Injection2 ijn2;
    MyBean(Injection1 ijn1){
      this.ijn1=ijn1;
    }

    public void setIjn2(Injection2 ijn2I ) {
      this.ijn2 = ijn2;
    }
}

和xml

<bean name="myBean" class="MyBean" scope="prototype">
  <property name="inj2" ref="injection2" />
</bean>


<bean name="injection2" class="Injection2">
</bean>