Spring を使用する既存の Java EE Web アプリケーションを更新しています。
私の web.xml には、次のように定義されたサーブレットがあります。
<servlet>
<display-name>My Example Servlet</display-name>
<servlet-name>MyExampleServlet</servlet-name>
<servlet-class>com.example.MyExampleServlet</servlet-class>
</servlet>
ここで、このクラスに @Autowite アノテーションを追加する必要があります。
class MyExampleServlet extends HttpServlet {
@Autowired (required = true)
MyExampleBean myExampleBean;
[...]
}
問題は、MyExampleBean がアプリケーション サーバーによって初期化されることです (私の場合は weblogic.servlet.internal.WebComponentContributor.getNewInstance...)。
そのため、Spring はそれを認識しておらず、Spring には「myExampleBean」を配線する機会がありません。
それを解決する方法は?つまり、MyExampleServlet が myExampleBean への参照を取得できるように、web.xml または MyExampleServlet をどのように変更する必要があるのでしょうか?
この初期化コードを MyExampleServlet 内に追加することもできますが、それには servletContext への参照が必要です。servletContext への参照を取得するには?
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
myExampleBean = (MyExampleBean) context.getBean("myExampleBean");