我正在尝试使用Spring为webapp自动装配一些bean(用于依赖注入)。一个控制器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的类asscoaite在这里…
@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注释以及通过XML config创建的类型为RecommendationionService的bean。正如JB Nizet解释的那样,这将导致创建一个通过@Component创建的名称为’suggestionService’的bean和另一个通过XML创建的名称为’SuggestionService’的bean。
当你通过@Autowired引用RecommendationionService时,在你的控制器中,Spring默认情况下会“按类型”自动装配并找到两个类型为’SuggestionService’的bean。
你可以执行以下操作
@Resource("suggestionService")
private SuggestionService service;
要么
@Resource("SuggestionService")
private SuggestionService service;
两者都应该起作用。第三是肮脏的修复程序,最好通过其他方式解决bean冲突。
我在MyBatis中使用了Spring,它在单个数据库中运行得非常好。我在尝试添加另一个数据库时遇到了困难(请参见Github上的可复制示例)。 你能看出我哪里出了问题吗?
嗨,我是Spring的新手:我有一个与我的项目配置相关的问题; 这是我的控制器: 它是非常基本的,当我在服务器上运行它时,我得到了这个错误:
我有这个超级班: 我想确定我完全理解了解决方案。通过,我给类DAOBase指定了特定的名称“daoBaseBeanname”,应用程序可以用它来标识类DAOBase,这样就不会把它与扩展DAOBase的其他类混淆了。对吗? 谢谢你。
我有这个超级班: 谢谢你。
我对从类扩展的Spring bean初始化有一个问题。我完全卡住了。 类hiearchy如下所示: 提到该类对需要初始化的服务很有用: 创建bean时: 则中的为null-似乎没有自动连线。 它能否与是从抽象类扩展而来的这一事实相联系? 这个bean可能从未初始化过... 这是个例外: org.springframework.beans.factory.UnsatisfiedDependencyE
现在在我的适配器项目中,我有CommonAdapter.java的实现类一个是EndecaAdapetr.java,另一个是SolarAdapter.java 现在在我的服务项目中,希望基于输入调用上述两个类的服务方法。