我想在扩展 HttpServlet 的类上注入(inject) DAO 依赖项,这可能吗?我不想从应用程序上下文中手动获取依赖项,但如果可能的话,希望在我的 Servlet 实例上进行真正的依赖项注入(inject)。我尝试用 @Controller 注释我的 Servlet:
@Controller
public class ItemsController extends HttpServlet {
@Autowired
private IItemDAO itemDAO;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Item> items= itemDAO.getItems();
req.setAttribute("items", items);
gotoPage("/jsp/itemList.jsp", req, resp);
}
protected void gotoPage(String address, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(address);
dispatcher.forward(request, response);
}
}
我的应用程序上下文:
<context:annotation-config />
<context:component-scan base-package="com.test.controller" />
<bean id="itemsController" class="com.test.controller.ItemsController " />
<bean id="itemDAO" class="com.test.dao.ItemDAO" />
现在据我了解,我的 Servlet(在 web.xml 中定义)不是由 Spring 管理的,因此我的 DAO 依赖项没有正确注入(inject),我怎样才能让 Spring 管理这个 bean?
最佳答案
Now to my understanding my Servlet (defined in web.xml) is not managed by Spring so my DAO dependency is not getting properly injected
没错。 Servlet
是由 Servlet 容器管理的组件。 @Controller
bean 是由 Spring 管理的组件。它们是两个(通常)相互冲突的概念。你应该把它们分开。
由于@Controller
只是一个注释,因此您可以拥有HttpServlet
类型的@Controller
bean,但它不会被管理或使用由 Servlet 容器(或反之亦然)。
如果您想要一个具有注入(inject)目标的 Servlet
,您可以使用提供的解决方案 here .
关于java - HttpServlet 上的 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24618357/