web-dev-qa-db-ja.com

JBossのサーブレットからSpringBeanにアクセスする

SpringBeanのメソッドを呼び出す単純なサーブレットをJBossで記述したいと思います。目的は、ユーザーがURLを押すことによって内部ジョブを開始できるようにすることです。

サーブレットでSpringBeanへの参照を取得する最も簡単な方法は何ですか?

JBoss Webサービスでは、@ Resourceアノテーションを使用してWebServiceContextをサービスクラスに挿入できます。プレーンサーブレットで機能する同等のものはありますか?この特定の問題を解決するためのWebサービスは、ハンマーを使用してナッツを粉砕することです。

24
Sophie Gage

サーブレットは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");
31
Chin Huang

それを行うには、はるかに洗練された方法があります。 SpringBeanAutowiringSupportinside 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を注入します。

60
Oliver Drotbohm

私はそれを行う1つの方法を見つけました:

WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
SpringifiedJobbie jobbie = (SpringifiedJobbie)context.getBean("springifiedJobbie");
8
Sophie Gage