Spring MVC Web应用程序中的依赖注入

时间:2016-04-13 17:07:54

标签: spring spring-mvc web-applications dependency-injection

我试图了解如何在基于Spring MVC框架的Web应用程序中进行DI。

为此,我修改了 web.xml

<web-app ...>

    <servlet>
        <servlet-name>spring-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

然后,我创建了 spring-dispatcher-servlet.xml

<beans xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans">

    <bean id="HandlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

    <bean name="/welcome.html" class="com.example.hellocontroller.HelloController"/>

    <bean id="simpleUtil" class="com.example.util.SimpleUtil"/> ----->(1)

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/</value>
        </property>

        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>
</beans>

以下是控制器类:

public class HelloController extends AbstractController {

    @Autowired
    private SimpleUtil simpleUtil; -------> (2)

    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request,
    HttpServletResponse response) throws Exception {

        System.out.println("calling the method add(a,b) ");

        simpleUtil.add(2, 3);

        ModelAndView modelandview = new ModelAndView("HelloPage");
        modelandview.addObject("welcomeMessage", "first Spring MVC Application");
        return modelandview;
    }
}

在spring-dispatcher-servlet.xml中我定义了各种bean,特别是在(1) - &gt; <bean name="simpleUtil" class="com.example.util.SimpleUtil"/>

现在,在控制器中我希望Spring框架注入这个bean,如(2)所示:

    @Autowired
    private SimpleUtil simpleUtil;

当我运行这个程序时,我得到NullPointerException,这意味着Spring没有注入依赖项。

我在这里做错了吗?如何使这项工作?

我的相关问题很少:

Q1)spring-dispatcher-servlet.xml是否用作bean定义配置文件?如果没有,那么我在哪里提供我想要由Spring管理的bean定义文件?

Q2)Spring MVC的前端控制器如何知道Handling Mapping的bean id是什么? (在我们的例子中,给出的ID是“HandlingMapping”)。

1 个答案:

答案 0 :(得分:1)

spring-dispatcher-servlet.xml用作bean定义配置文件,您需要在spring-dispatcher-servlet.xml中添加监听器,这是您需要在spring-dispatcher-servlet.xml

中添加的代码
<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/application-config.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

现在在application-config.xml中你可以做你的DI 对于控制器配置,您需要再添加一个xml文件 有关完整示例,请在github中查看spring的登录示例