2013-10-17 9 views
2

Springs MVC를 사용하여 GAE Web Project를 구성하려고 할 때 다음 예외가 발생합니다. 내 파일에서 다음 구성을 사용했습니다. Spring 3.2.3 버전을 사용하고 있으며 이미 내 클래스 경로에 spring-bean-3.2.3.jar이 있습니다.NoUniqueBeanDefinitionException : 유형이 한정된 Bean이 정의되지 않았습니다. 예상 단일 일치 bean이지만 발견 됨 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> 

스프링 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); 
} 
,210 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); 
    } 
} 

예외,299,

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) 

답변

1

오류는 당신이 UserDaoTestDao 모두를 작성, 스캔 구성 요소입니다 귀하의 패키지 중 하나에서 어딘가에

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

입니다. 그들은 모두 GenericDao의 구현이기 때문에 어느 것이 하나의 @Autowired 타겟으로 사용될 것인지 충돌합니다. 이 컨텍스트에서 TestDao을 제거해야한다고 생각합니다. 루트 컨텍스트

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

에서 구성의 나머지 부분이 보지 않고


이 서블릿 컨텍스트에서

<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="cnManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> 
... 

은 서블릿에 관련이 있습니다. 루트 컨텍스트가 아닌 서블릿 컨텍스트에 있어야합니다.서블릿 컨텍스트에서


는, 나는 GenericDao, GenricService 및 구현을 가지고 그들이 UserDao, TestDao에 의해 구현된다

<mvc:annotation-driven /> 
+0

선생님을 가능하게하는 것을 잊지 마세요. 나중에 Generic Interface와 Class의 메소드를 사용할 수 있도록 Generic Model을 만들어야합니다. –

+0

@ankur Spring이 두 개의 후보를 찾고 어느 것을 선택할 수 없기 때문에'AbstractAttributeGenericServiceImpl' 클래스의'@Autowired GenericDao genericDao;'는 작동하지 않습니다. 디자인을 다시 한번 생각해 보거나'@ Qualified' 어노테이션으로 특정 bean을 지정하십시오. –

+0

선생님 ** GenericDao에서 ** @ Autowired **를 제거했으며 예외가 없어졌습니다. 하지만 ** @ Autowired ** Annotation을 사용하지 않고 서비스 레이어를 사용하여 DAO 레이어에 액세스하는 방법을 안내해 줄 수 있습니까? –

관련 문제