我正在尝试连接我的FooServlet,它扩展了HttpServlet和ApplicationContext,它位于同一个Project中。 应用程序上下文已被Wicket Servlet使用
适用于
servletContext = this.getServletContext();
wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
(IMyBean)wac().getBean("myServiceBean")
现在我尝试在我的代码中使用显式的Spring类(WebApplicationContextUtils),因为它不是IoC方式。
Wicket Servlet与web.xml中的Application上下文相关联
<servlet>
<servlet-name>ExampleApplication</servlet-name>
<servlet-class>org.apache.wicket.protocol.http.WicketServlet</servlet-class>
<init-param>
<param-name>applicationFactoryClassName</param-name>
<param-value>org.apache.wicket.spring.SpringWebApplicationFactory</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
我找到了Spring HttpServletBean类,但我不知道它是否适用于我的Case
答案 0 :(得分:15)
我找到了一种在我的HttpServlet中注入Beans的方法(注意:我不需要Presentation View,否则有更高级的Spring类)
将ContextLoaderListener添加到web.xml,以便加载Spring的根WebApplicationContext
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
使用弹簧HttpRequestHandlerServlet类
配置Servlet<servlet>
<servlet-name>FooServlet</servlet-name>
<display-name>Foo Servlet</display-name>
<servlet-class>
org.springframework.web.context.support.HttpRequestHandlerServlet
</servlet-class>
</servlet>
让您的Servlet实现org.springframework.web.HttpRequestHandler接口
在ApplicationContext中将Servlet定义为Bean(beanID必须与“servlet-name”相同)。 现在可以在Spring DependencyInjection方式中注入所有necassary Beans而无需依赖查找。
答案 1 :(得分:2)
我认为你应该使用类似的Spring实用程序 RequestContextUtils.getWebApplicationContext(request,application); 在Servlet中连接Spring Context。 同意这不是DI / IoC,但servlet也不是bean!