我想在JBoss中编写一个简单的servlet,它将在Spring bean上调用方法。目的是允许用户通过点击URL来启动内部工作。
在servlet中获取对Spring bean的引用的最简单方法是什么?
JBoss Web服务允许您使用@Resource批注将WebServiceContext注入到服务类中。在普通servlet中,有什么可比的东西吗?
你的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");
有更复杂的方法可以做到这一点。有SpringBeanAutowiringSupport里面org.springframework.web.context.support可以让你建立这样的事情:
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。
ApplicationContext
ServletContext
ContextLoaderListener
Spring bean ApplicationContext