2010-12-08 25 views
0

私は現在、既存のプロジェクトを行っています。これはStruts 2 + Spring 2.5を使用しています。 1つのアクションクラスがありstruts 2アクションクラスのインスタンス変数の初期化

、、のはその内側など、サービス・インターフェースであるインスタンス変数があり、ActionA.javaそれを呼び出す

クラスActionA {

//変数

をしましょう

protected ServiceAInterface serviceA;

//アクションメソッドは、サービスAの方法ばねビーン定義で

}

を利用して、定義が<ビーンID = "サービスA" クラス= "com.company.serviceAImplementationClass"/>として、あります

serviceA変数の初期化に関連する他の場所は見つかりませんでした。本当に不思議です。どの部分がこの変数の正しい実装クラスを見つけて初期化していますか?

本当に私を困惑させる。任意の啓蒙に感謝します。

ジャッキー

+0

私は答えを見つけたと思う。ストラットスプリングプラグインがそこに置かれると、ストラットのobjectFactoryがスプリングに設定されます。デフォルトの自動配線は名前によるものです。つまり、アクションオブジェクトを初期化した後、プロパティ名と同じBean IDを持つSpring Beanを使用してプロパティを設定します。以下のようにプロパティを設定しなくても、アクションクラスBean定義の場合はhttp://struts.apache.org/2.x/docs/spring-plugin.html – lwpro2

答えて

0

一つの方法は、

<bean id="serviceA" class="com.company.serviceAImplementationClass"/> 

<bean id="actionClassA" class="com.company.ActionA"> 
    <property name="serviceA" ref="serviceA"/> 
</bean> 

としてサービスBeanを定義し、あなたのクラスでは、あなたのサービスクラスのセッターとゲッターを書くことです。

class ActionA{ 

//variables 

protected ServiceAInterface serviceA; 

//action methods, utilizing serviceA methods 

public ServiceAInterface getServiceA() { 
    return this.serviceA; 
} 

public void setServiceA(ServiceAInterface serviceA) 
    this.serviceA = serviceA; 
} 

} 

それはそれです。サービスクラスBeanは、アプリケーションの起動中に春までに初期化され、その参照はアクションクラスに割り当てられます。

+0

を入力してください。 アクションクラス内にsetterがあり、bean定義と同じプロパティ名が" serviceA "であるかぎりです。それも動作します。 実際はそれが私の質問です。とにかくコメントに感謝します。私は自分自身で答えを見つけました。 – lwpro2

+0

これは実際にhttp://struts.apache.org/2.0.8/docs/spring-plugin.htmlから参照できます。また、デバッグモードを使用して、私は実際には、依存関係が実行されているアクションのプロセスで注入されていることがわかった。 – lwpro2

関連する問題