3

私は最初のjavastruts2Webアプリケーションに取り組んでおり、呼び出される任意のクラスにBeanパラメーターを挿入できるようにしたいと考えています。しかし、これはストラットアクションクラスでのみ実行できることがわかりました...

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パラメーターを常に取得します(セッターを作成したと仮定します)。残念ながら、これらのBeanプロパティを取得できるのはstrutsアクションクラスのみです。すべてが設定されていません。

この質問は明確ですか?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 に答える