1

Web アプリケーション (Struts2 + Spring 2.5 + iBatis) の 1 つで、次の MVC 構造体を使用します。

ActionClass <---> ServiceInterface <---> ServiceImplementationClass <---> DAOClass <---> DB


これらすべての Java クラスは、Spring を使用してインスタンス化されます。Service クラスは、DI 手法を使用して Struts2 Action クラスに注入されます。Spring アプリケーション コンテキスト xml で使用されるスコープ属性について質問があります。

以下は、Spring の applicationcontext.xml からのサンプル エントリです。

理解したい

を。同時実行性の観点から、アクション クラスのみを Prototype として使用し、残りのレイヤー クラスを Singleton として使用することは正しいですか?

b. メモリリークの観点から、スコープを定義する際のガイドラインはありますか?

    <bean id="commonAction" scope="prototype"
    class="com.xyz.action.CommonAction">
    <property name="commonService" ref="commonService" />
</bean>

<bean id="commonService" class="com.xyz.service.impl.CommonServiceImpl">
    <property name="commonDao" ref="commonDao" />
</bean>

<bean id="commonDao" class="com.xyz.dao.impl.CommonDAOImpl">
    <property name="sqlMapClient" ref="sqlMap" />
</bean>

これがStruts xmlエントリです

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.objectFactory" value="spring" />
    <package name="default" namespace="/" extends="struts-default">

これに対するあなたの応答は高く評価されます。

4

1 に答える 1

1

並行性の問題は、実装の実装について詳しく知らなければ答えられません。アクションは要求ごと (つまり、プロトタイプ) であることが期待されます。他のクラスのスレッド セーフはあなた次第です。一般に、サービスと DAO はスレッド セーフになるように作成する必要があるため、デフォルトの「シングルトン」スコープは問題ありませんが、シングルトンである必要はありません。オブジェクトのインスタンス化は安価です。

「メモリリークの観点」から何を求めているのかわかりません。スコープはメモリリークに直接関係していません-参照を保持することは、通常、リークの原因です。

于 2012-10-12T15:11:27.083 に答える