【发布时间】: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) --> <bean name="simpleUtil" class="com.example.util.SimpleUtil"/>
现在,在控制器中,我希望这个 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