1

フォーム オブジェクトをプロキシ スコープとして宣言し、セッションで維持しています。フォーム オブジェクトを自動配線しているときはいつでも、コードは完全に機能しています。通常の POJO クラスで war レイヤーのフォーム オブジェクトにアクセスしたい場合、通常の Java クラス (Spring 以外) で Autowiring していないため、失敗します。コードスニペット...

@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "session")
class FormA{
}

Springコントローラーでは、SpringControllerの下でFormAを取得できます

@Controller
Class ControllerB{
@Autowired
FormA formA;
}

しかし、私の要件は、プレーンなサーブレット (非 Spring クラス、サーブレット 2.4 実装) で FormA にアクセスすることです。サーブレットで FormA のインスタンスを取得するにはどうすればよいですか?

web.xml に以下のリスナー エントリを追加しましたが、新しい formA が返されますが、セッションにある元の formA オブジェクトは返されません。

<listener>
    <listener-class>
        org.springframework.web.context.request.RequestContextListener
    </listener-class>
</listener>
4

1 に答える 1

2

リクエスト、セッション、およびグローバル セッション スコープ Bean がシングルトンまたはプロトタイプ スコープ Bean に注入される場合、Spring は生成されたプロキシを依存関係として注入します。

プロキシのターゲット オブジェクトが読み込まれると、リクエスト スコープの場合はスレッドローカル オブジェクトとして格納され、セッション スコープの場合はセッションに格納されます。プロキシで呼び出しが行われると、スレッドローカル/セッション スコープのターゲット オブジェクトへの呼び出しが委任されます。 .

あなたの場合、 FormA object が入力され、プロキシがコントローラーに挿入されている場合、そのリクエストでこのプロキシを使用して FormA object にアクセスできるはずです。ただし、単一のスレッド/セッションにある場合に限ります。

于 2013-03-18T11:38:50.787 に答える