SpringBeanのメソッドを呼び出す単純なサーブレットをJBossで記述したいと思います。目的は、ユーザーがURLを押すことによって内部ジョブを開始できるようにすることです。
サーブレットでSpringBeanへの参照を取得する最も簡単な方法は何ですか?
JBoss Webサービスでは、@ Resourceアノテーションを使用してWebServiceContextをサービスクラスに挿入できます。プレーンサーブレットで機能する同等のものはありますか?この特定の問題を解決するためのWebサービスは、ハンマーを使用してナッツを粉砕することです。
サーブレットはWebApplicationContextUtilsを使用してアプリケーションコンテキストを取得できますが、その場合、サーブレットコードはSpringFrameworkに直接依存します。
別の解決策は、SpringBeanを属性としてサーブレットコンテキストにエクスポートするようにアプリケーションコンテキストを構成することです。
<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
<property name="attributes">
<map>
<entry key="jobbie" value-ref="springifiedJobbie"/>
</map>
</property>
</bean>
サーブレットは、を使用してサーブレットコンテキストからBeanを取得できます。
SpringifiedJobbie jobbie = (SpringifiedJobbie) getServletContext().getAttribute("jobbie");
それを行うには、はるかに洗練された方法があります。 SpringBeanAutowiringSupport
inside org.springframework.web.context.support
これにより、次のようなものを構築できます。
public class MyServlet extends HttpServlet {
@Autowired
private MyService myService;
public void init(ServletConfig config) {
super.init(config);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
config.getServletContext());
}
}
これにより、SpringはそのApplicationContext
に関連付けられたServletContext
を検索し(たとえば、ContextLoaderListener
を介して作成)、そのApplicationContext
で使用可能なSpringBeanを注入します。
私はそれを行う1つの方法を見つけました:
WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
SpringifiedJobbie jobbie = (SpringifiedJobbie)context.getBean("springifiedJobbie");