gpt4 book ai didi

java - HttpServlet 上的 Autowiring

转载 作者:行者123 更新时间:2023-12-02 05:39:38 26 4
gpt4 key购买 nike

我想在扩展 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com