我正在更新使用 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 是由应用程序服务器初始化的(在我的例子中,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");