我想在 JBoss 中编写一个简单的 servlet,它将调用 Spring bean 上的方法。目的是允许用户通过点击 URL 来启动内部工作。
在 servlet 中获取对 Spring bean 的引用的最简单方法是什么?
JBoss Web 服务允许您使用 @Resource 注释将 WebServiceContext 注入到您的服务类中。有什么类似的东西可以在普通的 servlet 中工作吗?解决此特定问题的 Web 服务将使用大锤来粉碎坚果。
我想在 JBoss 中编写一个简单的 servlet,它将调用 Spring bean 上的方法。目的是允许用户通过点击 URL 来启动内部工作。
在 servlet 中获取对 Spring bean 的引用的最简单方法是什么?
JBoss Web 服务允许您使用 @Resource 注释将 WebServiceContext 注入到您的服务类中。有什么类似的东西可以在普通的 servlet 中工作吗?解决此特定问题的 Web 服务将使用大锤来粉碎坚果。
有一种更复杂的方法可以做到这一点。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
。
您的 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");
我找到了一种方法:
WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
SpringifiedJobbie jobbie = (SpringifiedJobbie)context.getBean("springifiedJobbie");