未能@AutoWire @WebServlet中的成员

时间:2014-03-10 04:03:40

标签: java spring spring-mvc servlets

我似乎无法将我的servlet字段输入@AutoWire;他们最终无效。我有一个纯注释配置的webapp(没有XML文件)。我的servlet看起来像这样:

@WebServlet("/service")
public
class
SatDBHessianServlet
    extends HttpServlet
{
    @Autowired  protected   NewsItemDAO             mNewsItemDAO;
}

其他@AutoWired似乎工作得很好,包括@Service对象和@Repository对象。但不是这个,我无法弄清楚为什么。我甚至尝试将其包添加到我的其他类的ComponentScan(basePackages)列表中。

其他信息:

我将以下内容添加到我的servlet的init()方法中,并且所有内容似乎都正确连接,但我很困惑为什么Spring不能在没有它的情况下连接它。

SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, inConfig.getServletContext());

2 个答案:

答案 0 :(得分:4)

Servlet是不是由Spring容器创建的Web组件,基于该生命周期不由容器管理,并且弹簧提供的许多东西(如自动装配或方面)无法从它们运行。

您需要向弹簧容器指出组件是在IoC容器外部创建的,并且需要成为其中的一部分。

正如API所说,SpringBeanAutowiringSupport用于:

  

方便的自动装配类的基类   在基于Spring的Web应用程序中构建

这个通用servlet基类不依赖于Spring ApplicationContext概念。

还有另一种方法可以指示spring容器使用接口

创建servlet

答案 1 :(得分:1)

Spring MVC使用DispatcherServlet来处理Servlet环境中的所有请求。 DispatcherServlet相应地根据该类的@Controller和/或它的方法将请求转发到适当的@RequestMapping类(如果有的话)。

你的Servlet中发生的事情是它不是由Spring管理的(而是由Servlet容器管理)并且没有注入依赖关系。