我似乎无法将我的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());
答案 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容器管理)并且没有注入依赖关系。