3

レガシーWebアプリケーション(Springベースではない)があり、いくつかの新しいSpring構成(スレッドセーフ)サービスBeanをいくつかのレガシーサーブレットのインスタンス変数に自動配線するためのベストプラクティスを探しています。すべてのサーブレットをSpringMVCに書き換えることは範囲外です。テストを容易にするために、サーブレット内のSpring固有のBeanルックアップコードでBeanを名前などでルックアップすることは望ましくありません。

セッションやリクエストなどのWeb固有のBeanスコープについては気にしないことに注意してください。すべてのサービスはシングルトンスコープです。

以下に、関連するコードスニペットを示します

MyServlet extends LegacyServletSuperclass
{
   private MyThreadSafeServiceBean wantThisToBeAutowiredBySpring;
   ....

}
4

1 に答える 1

2

@Configurable、と組み合わせて<context:load-time-weaver />使用@Autowired​​し、サーブレットで使用できます。これにより、Springによってインスタンス化されていないクラスをSpringで処理することができます。

別のアプローチを使用することもできます-init(..)サーブレットのメソッドで:

ApplicationContext ctx = 
    WebApplicationContextUtils.getWebApplicationContext(servletContext);
if (ctx != null) {
    ctx.getAutowireCapableBeanFactory().autowireBean(this);
}

これにより、すべてのSpring依存関係が設定されます(@Autowired/@Resourceが使用される場合)。これは、サービスクラスが春に定義されている場合に機能します。

テスト容易性の観点から-Webアプリケーションコンテキストがない場合は何も起こらず、依存関係を手動で設定できます。サーブレットのテスト方法に応じて、必要に応じてアプリケーションコンテキストをモックすることもできます。

于 2010-03-17T15:15:20.800 に答える