25

我想在 JBoss 中编写一个简单的 servlet,它将调用 Spring bean 上的方法。目的是允许用户通过点击 URL 来启动内部工作。

在 servlet 中获取对 Spring bean 的引用的最简单方法是什么?

JBoss Web 服务允许您使用 @Resource 注释将 WebServiceContext 注入到您的服务类中。有什么类似的东西可以在普通的 servlet 中工作吗?解决此特定问题的 Web 服务将使用大锤来粉碎坚果。

4

3 回答 3

60

有一种更复杂的方法可以做到这一点。SpringBeanAutowiringSupport里面有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)并注入其中可用的 Spring bean ApplicationContext

于 2010-03-26T12:48:33.870 回答
31

您的 servlet 可以使用 WebApplicationContextUtils 来获取应用程序上下文,但是您的 servlet 代码将直接依赖于 Spring Framework。

另一种解决方案是配置应用程序上下文以将 Spring bean 作为属性导出到 servlet 上下文:

<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
  <property name="attributes">
    <map>
      <entry key="jobbie" value-ref="springifiedJobbie"/>
    </map>
  </property>
</bean>

您的 servlet 可以使用从 servlet 上下文中检索 bean

SpringifiedJobbie jobbie = (SpringifiedJobbie) getServletContext().getAttribute("jobbie");
于 2009-01-21T23:07:51.237 回答
8

我找到了一种方法:

WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
SpringifiedJobbie jobbie = (SpringifiedJobbie)context.getBean("springifiedJobbie");
于 2009-01-21T22:28:38.833 回答