2017-07-25 3 views
0

springmvc4.2.4 autowire + mybatis3.2.8 wird gut funktionieren, könnte es nicht autowire, dass nach FreeMarker2.2.23.The Ausnahme nur durch Freemarkerspringmvc Freemarker konnte nicht Feld freeMarkerConfigurer

Console

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 
hinzufügen

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> 

feder 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> 

Controller:

@Autowired 
private FreeMarkerConfigurer freeMarkerConfigurer; 

Entfernen autowired Code von der Steuereinheit, funktionieren gut

+0

Wenn Sie die Bean mit dem Namen "freemarkerConfig" (ohne Angabe der Klasse!) Aus dem 'ApplicationContext' erhalten, was bekommen Sie? (Sie können 'ApplicationContextAware' verwenden, um den' ApplicationContext' zu erhalten.) – ddekany

+0

@ddekany nicht gefunden, dass die Bean von ApplicationContext erhalten, aber ich finde eine Möglichkeit, mein Problem zu lösen – WaterCube

Antwort

0

nur den Code bewegen, dass

<!--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> 

von feder mvc.xml (DispatcherServlet) zu applicationContext.xml, es funktioniert. aber ich weiß nicht, warum gut arbeiten, die diesen Code in Spring-mvc.xml platzieren.

+0

Ah ... 'spring-mvc.xml' erstellt ein Kindkontext von 'ApplicationContext.xml'. Das problematische Autowinding hat diesen Kindkontext nicht verwendet. – ddekany

+0

@ddekany Danke – WaterCube

Verwandte Themen