我正在更新使用Spring的现有Java EE Web应用程序。
在我的web.xml中,有一个servlet定义如下:
<servlet>
<display-name>My Example Servlet</display-name>
<servlet-name>MyExampleServlet</servlet-name>
<servlet-class>com.example.MyExampleServlet</servlet-class>
</servlet>
现在,在这个课程中,我需要添加一个@Autowite注释:
class MyExampleServlet extends HttpServlet {
@Autowired (required = true)
MyExampleBean myExampleBean;
[...]
}
问题是MyExampleBean是由Application Server初始化的 (在我的例子中,weblogic.servlet.internal.WebComponentContributor.getNewInstance ...)
所以,Spring并没有意识到这一点,并且Spring没有机会连接“myExampleBean”。
如何解决? 也就是说,我需要如何修改web.xml或MyExampleServlet以便MyExampleServlet获取对myExampleBean的引用?
可能是在MyExampleServlet中添加此初始化代码, 但它需要引用servletContext。如何获取对servletContext的引用?
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
myExampleBean = (MyExampleBean) context.getBean("myExampleBean");
答案 0 :(得分:2)
我看,HttpServlet / GenericServlet有一个getServletContext()方法, (并且应用程序服务器首先调用servlet的init(ServletConfig配置),config包含对servletContext的引用)。
请参阅http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/GenericServlet.html
修改了代码:
class MyExampleServlet extends HttpServlet {
MyExampleBean myExampleBean;
@Override
public void init() throws ServletException {
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
myExampleBean = (MyExampleBean) context.getBean("myExampleBean");
}
[...]
}
答案 1 :(得分:0)
在您的应用程序上下文xml中,您需要类似
的内容<bean id="myExampleBean" class="path/to/myExampleBean">