春季自动装配与独特的豆:春季预计单一匹配豆,但发现2
发布时间:2020-12-14 04:33:11 所属栏目:百科 来源:网络整理
导读:我试图使用Spring for webapp自动连接一些bean(用于依赖注入)。一个控制器bean包含另一个bean,它又保存另一组bean的hashmap。现在地图上只有一个条目。当我在tomcat中运行并调用该服务时,我收到一条错误,指出第二个bean(控制器中保存)不是唯一的 No uniqu
我试图使用Spring for webapp自动连接一些bean(用于依赖注入)。一个控制器bean包含另一个bean,它又保存另一组bean的hashmap。现在地图上只有一个条目。当我在tomcat中运行并调用该服务时,我收到一条错误,指出第二个bean(控制器中保存)不是唯一的
No unique bean of type [com.hp.it.km.search.web.suggestion.SuggestionService] is defined: expected single matching bean but found 2: [suggestionService,SuggestionService] 我无法看到我在哪里定义这个bean两次,但是对于Spring和自动布线来说是新的,所以我可能会缺少一些基本的东西。下面列出的xml和2类的源代码… <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <context:component-scan base-package="com.hp.it.km.search.web.suggestion" /> <mvc:annotation-driven /> <context:annotation-config /> <bean id="SuggestionController" class="com.hp.it.km.search.web.suggestion.SuggestionController"> <property name="service"> <ref bean="SuggestionService" /> </property> </bean> <bean id="SuggestionService" class="com.hp.it.km.search.web.suggestion.SuggestionService"> <property name="indexSearchers"> <map> <entry key="KMSearcher"> <ref bean="KMSearcherBean"></ref></entry> </map> </property> </bean> <bean id="KMSearcherBean" class="com.hp.it.km.search.web.suggestion.SuggestionIndexSearcher"> <constructor-arg index="0" value="KMSearcher" /> <constructor-arg index="1" value="C://dev//workspace//search-restful-webapp//src//main//resources//indexes//keyword" /> </bean> 与自动连线控制器和服务bean的类屁股在这里… @Controller public class SuggestionController { private SuggestionService service; @Autowired public void setService(SuggestionService service) { this.service = service; } public SuggestionService getService() { return service; } 和… @Component public class SuggestionService { private Map<String,IndexSearcher> indexSearchers = new HashMap<String,IndexSearcher>(); @Autowired public void setIndexSearchers(Map<String,IndexSearcher> indexSearchers) { this.indexSearchers = indexSearchers; } public SuggestionService() { super(); } 请帮忙!
问题是因为您有一个通过@Component注释创建的SuggestionService类型的bean,也是通过XML配置创建的。如JB Nizet所解释的,这将导致通过@Component创建一个名为“suggestionService”的bean,另一个通过XML创建名为“SuggestionService”的bean。
当您在控制器中引用@Autowired的SuggestionService时,默认情况下,Spring会自动导线“类型”,并找到两个类型为“SuggestionService”的bean 您可以执行以下操作 >从您的服务中删除@Component,并依赖于通过XML映射 – 最简单 @Resource("suggestionService") private SuggestionService service; 要么 @Resource("SuggestionService") private SuggestionService service; 两者都应该工作。第三个是肮脏的修复,最好通过其他方式解决bean冲突。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |