单元测试遇到的坑,报错:java.lang.IllegalStateException: Failed to load ApplicationContext

对于刚接触到spring和springmvc的我来说,遇到了这个坑还没有查到合理的资料.

单元测试和spring配置的冲突

Code,pom.xml,Version都没什么问题
查阅了大量的资料,没找到合理的解释
报错:在这里插入图片描述
applicationContext.xml

    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/"/>
        <property name="suffix" value=".jsp"/>
    bean>
    
    <mvc:default-servlet-handler/>
    
    <mvc:annotation-driven/>
    
    <context:component-scan base-package="com.itheima.service.Impl"/>
    
    <context:property-placeholder location="classpath:jdbc.properties"/>

单元测试Code
单元测试遇到的坑,报错:java.lang.IllegalStateException: Failed to load ApplicationContext_第1张图片
通过测试:
问题:
1.InternalResourceViewResolver视图解析器与单元测试冲突
2.mvc:default-servlet-handler/加载静态资源配置与单元测试冲突
3. mvc:annotation-driven/启动注解驱动与单元测试冲突
所以

在使用单元测试对该xml文件扫描的时候应该把这三个配置注释掉

当然也不怕排除其他因素的影响,导致编译报错

拓展:

在springMVC-servlet.xml中配置<mvc:default-servlet-handler />后,
会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,
它会像一个检查员,对进入DispatcherServlet的URL进行筛查,
如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,
如果不是静态资源的请求,才由DispatcherServlet继续处理。

一般Web应用服务器默认的Servlet名称是"default",
因此DefaultServletHttpRequestHandler可以找到它。
如果你所有的Web应用服务器的默认Servlet名称不是"default",
则需要通过default-servlet-name属性显示指定:

<mvc:default-servlet-handler 
default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />
这是该注解的主要功能,添加< mvc:annotation-driven/>注解后,
容器中会<自动注册HandlerMapping与HandlerAdapter 两个bean。
省去手动注册HandlerMapping和HandlerAdapter的步骤。

当配置了< mvc:annotation-driven/>后,
Spring就知道了我们启用注解驱动。
然后Spring通过< context:component-scan/>标签的配置,
会自动为我们将扫描到的@Component,@Controller,
@Service,@Repository等注解标记的组件注册到工厂中,来处理我们的请求。
SpringMVC在处理器方法中通常返回的是逻辑视图,
如何定位到真正的页面,就需要通过视图解析器
InternalResourceViewResolver是SpringMVC中比较常用视图解析器。

你可能感兴趣的:(java,java)