springmvc freemarker无法自动装配字段freeMarkerConfigurer

时间:2017-07-25 10:16:16

标签: spring-mvc freemarker

springmvc4.2.4 + mybatis3.2.8运行良好,添加FreeMarker2.2.23后无法自动加载。此异常仅由FreeMarker引起

控制台

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer com.water.controller.HtmlGenController.freeMarkerConfigurer; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    ... 22 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
    ... 24 more

的web.xml:

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring/applicationContext-*.xml</param-value>
  </context-param>



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

    <servlet>
        <servlet-name>wmall-manager</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>abc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

弹簧mvc.xml

<context:property-placeholder location="classpath:config/resource*.properties"/>
    <context:component-scan base-package="com.abc"/>
    <mvc:annotation-driven/>
    <mvc:default-servlet-handler/>
 <!--freemarker-->
    <bean id="freemarkerConfig" name="freemarkerConfig"
          class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="WEB-INF/ftl/" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

控制器:

@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;

从控制器中删除自动装配的代码,运行良好

1 个答案:

答案 0 :(得分:0)

只需移动

代码即可
<!--freemarker-->
<bean id="freemarkerConfig" name="freemarkerConfig"
 class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="WEB-INF/ftl/" />
    <property name="defaultEncoding" value="UTF-8" />
</bean>

从spring-mvc.xml(DispatcherServlet)到ApplicationContext.xml,它可以工作。 但我不知道为什么将这些代码放在spring-mvc.xml中也能很好地工作。