3

我正在开发我的第一个 java struts2 webapp,并希望能够将 bean 参数注入到任何被调用的任意类中。但我发现我只能用 struts 动作类来做到这一点......

假设我的 applicationContext.xml 文件中有这个 bean:

<bean id="BeanTest" class="BeanTest">
    <property name="test" value="someval" />
</bean>

如果我有一个名为 BeanTest 的 struts 动作类设置(就像这样),并且我添加了一个设置器(public void setTest()),那么将设​​置测试参数并且我可以访问它。

import com.opensymphony.xwork2.ActionSupport;

public class BeanTest extends ActionSupport{
    private String test;

    public String execute(){
        String str = getTest(); // returns "someval"
        return "success";
    }

    public void setTest(String test){
        this.test = test;
    }

    public String getTest(){
        return test;
    }
}

但是,假设我将 bean 更改为 BeanTest2,如下所示:

<bean id="BeanTest2" class="BeanTest2">
    <property name="test" value="someval" />
</bean>

我有一个像这样的独立课程:

public class BeanTest2{
    private test;

    public void setTest(String test){
        this.test = test;
    }

    public String getTest(){
        return test;
    }
}

如果我在 BeanTest 中创建 BeanTest2 的实例,并调用 getTest,它总是返回 null。

import com.opensymphony.xwork2.ActionSupport;

public class BeanTest extends ActionSupport{
    public String execute(){

        BeanTest2 bt = new BeanTest2();
        String str = bt.getTest(); //returns null, but I want "someval"

        return "success";
    }
}

我想要做的是在 applicationContext 中设置一个 bean,以便我可以将它指向任意类,并且该类将始终获得我设置的任何 bean 参数(假设我已经为它们创建了设置器)。不幸的是,只有 struts 动作类能够获得这些 bean 属性。一切都没有准备好。

这个问题清楚吗?我觉得我错过了关于 bean 工作方式的一些明显的东西。

4

1 回答 1

2

我认为 Spring 通常只会为那些由 Spring 创建的类进行依赖注入,而不是为你自己使用 new 运算符创建的那些。

BeanTest 是由 Spring 创建的,因此它会注入其依赖项,但 BeanTest2 不是由 Spring 创建的,因此 Spring 对 BeanTest2 实例一无所知。

您可以将 BeanTest2 添加为 BeanTest 中的字段

public class BeanTest {
   private BeanTest2 beanTest2;
   public void setBeanTest2(BeanTest2 b) { this.beanTest2 = b; }
   public BeanTest2 getBeanTest2() { return this.beanTest2; };
}

然后您可以将 beanTest2 注入 beanTest 实例。

<bean id="beanTest2" class="BeanTest2">
    <property name="test" value="someval" />
</bean>

<bean id="beanTest" class="BeanTest">
    <property name="beanTest2" ref="beanTest2" />
</bean>

这样 beanTest2 应该被注入到 BeanTest 实例中。

于 2009-06-04T20:28:13.597 回答