【问题标题】:Dependency Injection in Spring MVC web-applicationSpring MVC Web 应用程序中的依赖注入
【发布时间】:2023-03-30 07:52:01
【问题描述】:

我正在尝试了解如何在基于 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) --> &lt;bean name="simpleUtil" class="com.example.util.SimpleUtil"/&gt;

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

    @Autowired
    private SimpleUtil simpleUtil;

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

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

我这里有几个相关的问题:

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

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

【问题讨论】:

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


    【解决方案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 登录示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多