java - HttpServlet 上的 Autowiring

标签 java spring servlets

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

相关文章:

java - 在哪里可以看到 Openshift 的控制台日志?

java - 常量字节数组的 new String() 是否在编译时求值?

java - 使用 Java 中的 RESTful API,生成工件。

java - apache.commons.fileuploads 一次解析后未解析请求

tomcat - Tomcat 上的 Spring MVC 应用程序 : 404 error, SNAPSHOT 不可用

java - 嵌套获取性能

java - 代码覆盖率分析的三种方法有什么区别?

java - 在 Java Spring Maven Web 应用程序中调用 C/C++ 函数

使用 jUnit 测试 RESTful Api 时出现 java.lang.NullPointerException

java - 如何在servlet中处理编码的unicode文本?