java - 如何让一个类使用 applicationContext bean?

标签 java spring struts javabeans

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

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

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

如果我有一个名为 BeanTest 的 struts 操作类设置(就像这样),并且我添加了一个 setter (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 参数(假设我已经为它们创建了 setter)。不幸的是,发生的情况是只有 struts 操作类能够获得这些 bean 属性。一切都没有准备好。

这个问题清楚了吗?我觉得我遗漏了一些关于 bean 工作方式的明显信息。

最佳答案

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

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

你可以在 BeanTest 中添加 BeanTest2 作为字段

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

然后你可以将 beanTest2 注入(inject) beanTest 实例。

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

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

这种方式应该将 beanTest2 注入(inject)到 BeanTest 实例中。

关于java - 如何让一个类使用 applicationContext bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/952872/

相关文章:

java - jdbc-pool 出现太多池耗尽错误

c# - 如何测试一个充满常量的类

Java:String.Format 是否像 C# 一样存在于 Java 中?

java - 无法在Windows上运行Hello World java程序

java - getCurrentSession 调用在 openSession 之后立即失败

spring - 如何使用 ModelAndView 在 RestController 上实现 REST API

java - java中的时间与帧

html - 这是什么意思?

java - 使用 Project Reactor 并行调用其余 Web 服务?

struts - <html :radio> Check radio button default in struts html tag