2013-10-17 4 views
2

Je reçois l'exception ci-dessous lorsque j'essaie de configurer mon projet Web GAE en utilisant Springs MVC. J'ai utilisé les configurations suivantes dans mes fichiers. J'utilise spring-3.2.3 version de Springs et j'ai spring-bean-3.2.3.jar dans mon classpath déjà.NoUniqueBeanDefinitionException: Aucun bean qualificatif de type n'est défini: haricot correspondant unique attendu mais trouvé 2

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:util="http://www.springframework.org/schema/util" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation="http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd 
http://www.springframework.org/schema/util 
http://www.springframework.org/schema/util/spring-util-3.2.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.2.xsd"> 

    <context:annotation-config /> 

    <context:component-scan base-package="com.myweb.webservices" /> 

    <bean id="cnManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> 
     <property name="favorPathExtension" value="true"/> 
     <property name="ignoreAcceptHeader" value="true" /> 
     <property name="defaultContentType" value="text/html" /> 
     <property name="useJaf" value="false"/> 

     <property name="mediaTypes"> 
      <map> 
       <entry key="html" value="text/html" /> 
       <entry key="json" value="application/json" /> 
       <entry key="xml" value="application/xml" /> 
      </map> 
     </property> 
    </bean> 

    <mvc:annotation-driven/> 
    <mvc:annotation-driven content-negotiation-manager="cnManager"/> 

    <bean class="com.myweb.webservices.spring.MvcConfiguringPostProcessor" /> 
</beans> 

ressort servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:p="http://www.springframework.org/schema/p" 
xmlns:util="http://www.springframework.org/schema/util" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:mvc="http://www.springframework.org/schema/mvc" 
xsi:schemaLocation="http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd 
http://www.springframework.org/schema/util 
http://www.springframework.org/schema/util/spring-util-3.2.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.2.xsd"> 


    <context:annotation-config /> 
    <context:component-scan base-package="com.myweb.webservices."/> 
    <context:component-scan base-package="com.myweb.webservices.dao"/> 
    <context:component-scan base-package="com.myweb.webservices.service"/> 
    <context:component-scan base-package="com.myweb.webservices.controller"/> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
     p:prefix="/jsp/" p:suffix=".jsp" /> 
</beans> 

GenericDao.java

public interface GenericDao { 
    public <T> void create(T t); 
} 

AbstractGenericDaoImpl.java

public abstract class AbstractGenericDaoImpl implements GenericDao{ 

    static { 
     ObjectifyService.register(User.class); 
    } 

    @Override 
    public <T> void create(T t) { 
     ofy().save().entity(t).now(); 
    } 
} 

GenericService.java

public interface GenericService { 
    public <T> void create(T t); 
} 

AbstractGenericServiceImpl.java

public abstract class AbstractGenericServiceImpl implements GenericService{ 

    @Autowired 
    GenericDao genericDao; 

    @Override 
    public <T> void create(T t) { 
     genericDao.create(t); 
    } 
} 

Exception

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.filterChains': Cannot resolve reference to bean 'org.springframework.security.web.DefaultSecurityFilterChain#0' while setting bean property 'sourceList' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.web.DefaultSecurityFilterChain#0': Cannot resolve reference to bean 'authenticationFilter' while setting constructor argument with key [2]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationFilter' defined in ServletContext resource [/WEB-INF/spring-security.xml]: Cannot resolve reference to bean 'customAuthenticationManager' while setting bean property 'authenticationManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customAuthenticationManager': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.myweb.webservices.service.UserService com.myweb.webservices.authentication.CustomAuthenticationManager.userService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.myweb.webservices.common.dao.GenericDao com.myweb.webservices.common.dao.AbstractGenericServiceImpl.genericDao; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.myweb.webservices.common.dao.GenericDao] is defined: expected single matching bean but found 2: testDao,userDao 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329) 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:353) 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:154) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1387) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1128) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:608) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) 
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) 
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548) 
at org.mortbay.jetty.servlet.Context.startContext(Context.java:136) 
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) 
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) 
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) 
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130) 
at org.mortbay.jetty.Server.doStart(Server.java:224) 
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 
at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:249) 
at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:307) 
at com.google.appengine.tools.development.AutomaticServerInstanceHolder.startUp(AutomaticServerInstanceHolder.java:26) 
at com.google.appengine.tools.development.AbstractServer.startup(AbstractServer.java:80) 
at com.google.appengine.tools.development.Servers.startup(Servers.java:82) 
at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:237) 
at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:339) 
at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48) 
at com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:274) 
at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:250) 

Répondre

1

L'erreur est

No qualifying bean of type [com.myweb.webservices.common.dao.GenericDao] is defined: expected single matching bean but found 2: testDao,userDao 

Quelque part dans un de vos paquets qui sont composants numérisés, vous créez à la fois un UserDao et un TestDao. Comme il s'agit des deux implémentations de GenericDao, ils sont en conflit et seront utilisés comme cible @Autowired. Je crois que vous devriez vous débarrasser de votre TestDao dans ce contexte.


Sans voir le reste de votre configuration, dans votre contexte racine

<context:component-scan base-package="com.myweb.webservices" /> 

et ce dans le contexte de servlet

<context:component-scan base-package="com.myweb.webservices."/> 
<context:component-scan base-package="com.myweb.webservices.dao"/> 
<context:component-scan base-package="com.myweb.webservices.service"/> 
<context:component-scan base-package="com.myweb.webservices.controller"/> 

va créer des haricots en double qui engendreront très probablement plus problèmes. Faites des analyses de composants aussi spécifiques que possible. L'analyse des composants est récursive dans les packages.


Ce haricot

<bean id="cnManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> 
... 

n'est pertinente à votre servlet. Il devrait être dans le contexte de servlet, pas dans le contexte racine.


Dans votre contexte de servlet, ne pas oublier de permettre

<mvc:annotation-driven /> 
+0

Monsieur, j'ai un GenericDao, GenricService et sa mise en œuvre et ils sont mis en œuvre par UserDao, TestDao. Je dois créer un modèle générique afin que ce dernier puisse utiliser les méthodes de l'interface générique et des classes. –

+0

@ankur Ce 'GenericDao genericDao; @Autowired 'dans votre classe' AbstractGenericServiceImpl' ne fonctionnera pas car Spring trouve deux candidats et ne peut pas choisir lequel. Repensez votre conception ou spécifiez quel bean spécifiquement avec l'annotation '@ Qualified'. –

+0

Monsieur J'ai supprimé ** @ Autowired ** de GenericDao et l'exception est absente. Mais pouvez-vous me guider comment puis-je accéder à la couche DAO en utilisant Service Layer sans utiliser ** @ Autowired ** Annotation. –

Questions connexes