2017-07-25 149 views
0

springmvc4.2.4 + mybatis3.2.8被很好地工作,但它不能自動裝配的是隻增加的FreeMarker造成的freemarker用SpringMVC無法自動裝配領域freeMarkerConfigurer

控制檯

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 
FreeMarker2.2.23.The異常後

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; 

刪除自動裝配代碼,工作良好

+0

如果從'ApplicationContext'中得到名爲「freemarkerConfig」的bean(不指定類!),你會得到什麼? (你可以使用'ApplicationContextAware'來獲得'ApplicationContext'。) – ddekany

+0

@ddekany沒有發現從ApplicationContext獲取bean,但我找到了解決問題的方法 – WaterCube

回答

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> 

從彈簧mvc.xml(DispatcherServlet的)到applicationContext.xml中,這行得通。 但我不知道爲什麼在spring-mvc.xml中將代碼置於哪個位置。

+0

啊......'spring-mvc.xml'創建一個ApplicationContext.xml的子上下文。有問題的自動裝配沒有使用該子上下文。 – ddekany

+0

@ddekany謝謝 – WaterCube