我正在开发我的第一个java struts2 webapp,希望能够将Bean参数注入到所调用的任意类中。但是我发现我只能使用struts动作类来做到这一点...
假设我的applicationContext.xml文件中有这个bean:
<bean id="BeanTest" class="BeanTest">
<property name="test" value="someval" />
</bean>
如果我有一个名为BeanTest的struts动作类设置(像这样),并且添加了一个setter(公共void setTest()),那么将设置test参数,并且我可以访问它。
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参数(假设我已经为它们创建了setter)。不幸的是,发生的事情是只有struts动作类才能获得这些bean属性。一切都没有定下来。
这个问题清楚吗?我觉得我似乎缺少关于豆类工作方式的明显认识。
最佳答案
我认为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实例中。