使用独特的 bean 进行 spring 自动装配:Spring 期望单个匹配的 bean,但发现了 2 个

2023-12-24

我正在尝试使用 Spring 自动装配一些 bean(用于依赖注入)作为 web 应用程序。一个控制器 bean 包含另一个 bean,而另一个 bean 又保存另一组 bean 的哈希图。目前该地图只有一个条目。当我在 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;
}

and...

@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 创建的 SuggestionService 类型的 bean。正如 JB Nizet 所解释的,这将导致创建一个名为“suggestionService”的 bean(通过 @Component 创建)和另一个名为“SuggestionService”(通过 XML 创建)的 bean。

当您通过 @Autowired 引用 SuggestionService 时,在控制器中,Spring 默认情况下“按类型”自动装配并找到两个“SuggestionService”类型的 bean

您可以执行以下操作之一

  1. 从您的服务中删除 @Component 并依赖于通过 XML 的映射 - 最简单

  2. 从 XML 中删除 SuggestionService 并自动装配依赖项 - 使用 util:map 注入 indexSearchers 映射。

  3. 使用 @Resource 而不是 @Autowired 通过名称来选择 bean。

     @Resource(name="suggestionService")
     private SuggestionService service;
    

or

    @Resource(name="SuggestionService")
    private SuggestionService service;

两者都应该可以工作。第三个是肮脏的修复,最好通过其他方式解决 bean 冲突。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用独特的 bean 进行 spring 自动装配:Spring 期望单个匹配的 bean,但发现了 2 个 的相关文章

  • 模拟匿名函数

    我正在编写 jUnits 但被 Lambda 表达式困住了 有没有办法模拟匿名函数 return retryTemplate execute retryContext gt return mockedResponse 在上面的代码中 我试图
  • Spring / AOP:在数据库中实现活动日志的最佳方式

    我已经阅读了一些 Spring AOP 教程 并且对相关概念有了一定的熟悉 现在满足我的要求 我需要创建一个活动日志实现 它将在数据库中保存登录用户的活动 范围包括申请服务或在以下情况下创建新用户Admin用户等 在调用任何具有注释的方法时
  • 用于 Spring boot 的数据库 application.yml from applications.properties

    我有一个连接到 Postgres 数据库的工作 Spring Boot 应用程序 我已经使用 application properties 文件设置了项目 但想切换到 application yml 文件 然而 当我进行切换时 我的应用程序
  • 如何在@FacesConverter中注入@EJB、@PersistenceContext、@Inject、@Autowired等?

    我怎样才能注入像这样的依赖项 EJB PersistenceContext Inject AutoWired等在一个 FacesConverter 在我的具体情况下 我需要通过注入 EJB EJB FacesConverter public
  • 从 HttpServletRequest 获取目标控制器

    我已经设置了 spring security 来验证和授权进入我的应用程序的请求 我已将配置设置如下 public class OAuth2ServerConfiguration extends ResourceServerConfigur
  • 在ConfigureServices中注入依赖

    在我的 ASP Net Core 应用程序中 我需要在以下位置注入一些依赖项 在我的例子中是一个存储库 ConfigureServices method 问题是该方法不允许使用多个参数来注入依赖项 该怎么办呢 这是我的代码 public v
  • 在thymeleaf中获取spring应用环境

    我的 Spring Boot 应用程序以 3 种配置运行 application properties gt 用于开发环境 application test properties gt 用于测试环境 application developm
  • 根据查询参数将相同的URL映射到Spring中的不同控制器

    我正在使用基于 spring 注解的控制器 我希望我的 URL user messages 映射到某个控制器 a 如果存在查询参数标记 否则映射到某个不同的控制器 b 这是必需的 因为当存在参数标签时 可以存在更多参数以及我想要在不同控制器
  • Spring-MVC 控制器重定向到“上一页”?

    假设我有一个用于编辑 Pony 属性的表单 并且在我的 Web 应用程序中有多个位置可以选择编辑 Pony 例如 在小马列表中 每个小马旁边可能有一个 编辑 链接 并且当用户查看小马时 该视图中也可能有一个 编辑 链接 当用户在编辑小马后单
  • .net 4.7 中的依赖注入?

    我对 DI 有哪些集成选项有点困惑 我发现它对于 net core 对于我的特定项目 来说非常简单 但我不需要构建跨平台应用程序 也看不到使用 core 的优势 但是 net 框架应用程序似乎仍然使用 Global asax 设置且没有 S
  • Java - 如何创建仅适用于类型上下文的注释类型? (PURE类型注释)

    要创建适用于类型上下文的类型注释 除了使用元注释注释类型之外 没有其他方法 Target ElementType TYPE USE 然而 由于 Java 设计者的错误决定 该注释也适用于声明上下文 根据 Java SE 文档 它是这样写的
  • spring mvc中无法将表单数据保存到数据库

    我正在构建一个 Spring MVC 应用程序 有人可以在其中填写表单 如果单击 发送 则表单数据将保存在数据库中 我正在使用 spring data jpa 但是当我填写表单并单击 发送 时 它显示 HTTP Status 500 错误
  • Java 不提供双向 SSL 客户端证书?

    我正在尝试使用相互 SSL 从 Java Spring Boot 应用程序连接到 NetScaler 端点 我可以使用以下命令通过 OpenSSL 在命令行上按预期进行连接 openssl s client connect xxxx xxx
  • 在 spring-boot 中设置 base-href 和 context-path - Angular 6 应用程序

    我正在构建一个 Web 应用程序 其中 UI 客户端组件是使用 Angular 6 构建的 后端 服务器端 位于 Spring boot 上 申请预计可在 http localhost 8080 FUtility 我通过在 appmodul
  • 卡夫卡监听器中的钩子

    kafka 监听消息之前 之后是否有任何类型的钩子可用 使用案例 必须设置MDC关联id才能进行日志溯源 我在寻找什么 之前 之后回调方法 以便可以在进入时设置 MDC 关联 ID 并最终在退出时清除 MDC 编辑后的场景 我将关联 id
  • AMQP Spring 集成错误处理

    我的集成流程如下所示 Bean public IntegrationFlow auditFlow Qualifier eventLoggingConnectionFactory ConnectionFactory connectionFac
  • Thymeleaf 下拉菜单中的默认值

    我正在使用 Spring MVC 和 thymeleaf 构建一个 Web 应用程序 我的下拉菜单是这样的并且它按预期工作
  • 我可以在 Groovy 中编写注释吗?

    我知道我可以在 Groovy 中使用注释来注释我的类 但是我可以在 Groovy 中编写注释本身吗 而不是仅使用用 Java 编写的注释 如果有 从哪个版本开始 您可以在 Groovy 中定义注释 查看更多 http docs groovy
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要

随机推荐

  • sqlite3_exec是否存在内存泄漏?

    我正在使用 SQLite 来存储我的数据 我正在编写包装类 我想知道 如果 res SQLITE OK 和 errorMsg 将显示到屏幕上 是否会发生内存泄漏 那么我需要做 free errorMsg 吗 在 if 语句中 谢谢 int
  • 如何告诉 lcov 在哪里可以找到我的 .cpp 和 .h 文件?

    我的源代码和构建树如下所示 请参阅Makefile 将不同目录中的源文件中的目标文件放入单个单独的目录中 https stackoverflow com questions 4102469 makefile to put object fi
  • 在AngularJS中添加/删除多个li的类

    我的清单如下 ul li one li li two li li three li ul 现在 当一个特定的li被点击 我想要active要添加到相同的类并删除active与其他班级相比li元素 另外 当同样li再次点击我想删除active
  • 服务器崩溃后 MongoDB 将无法启动

    我的 Ubuntu 计算机崩溃了 当我重新启动它时 MongoDB 无法工作 我尝试了以下命令 并得到以下输出 mongo Error couldn t connect to server 127 0 0 1 27017 src mongo
  • 识别联合多边形的原始边

    我有很多多边形 在将所有这些多边形合并后 我得到一个新的大多边形 联合算法是一个黑匣子 使用第三方库过程 我无法控制 我也不希望从进度中提取任何信息 有没有有效的方法让我知道 对于那个巨大的联合多边形的每条边 其中哪一条属于较小多边形的哪条
  • 为什么我得到的是 AggregationCursor 结果而不是平均值?

    我正在查询 MongoDB 数据库 但不明白为什么当我期望返回单个数字时却得到聚合器游标 也许我需要从光标对象中获取一些东西 只是想不明白是什么 module exports CalculateAvg async collection gt
  • Ruby require 'tk' 产生 LoadError: no such file to load -- tk

    我无法让红宝石需要 tk 成功地 我正在使用 rvm ruby 2 0 0 ActiveTcl 8 6 和 Ubuntu 12 04 LTS 我跑了wish与 ActiveTcl 一起提供 它似乎可以工作 我查看了 RVM 网站http r
  • Xcache var_size 错误

    我正在尝试将 xcache 与 zend 框架结合使用来缓存 Zend Db Table Abstract 中的元数据 以便每个表仅调用一次描述查询 在我的引导程序中实现 xcache 并运行该应用程序时 出现以下错误 Warning xc
  • 没有发送过期标头,缓存内容,浏览器发出条件 GET 请求需要多长时间?

    假设浏览器默认设置 并且发送的内容没有过期标头 用户访问网站 浏览器缓存图像等 用户没有关闭浏览器或刷新页面 用户继续正常浏览网站 假设浏览器不会出于任何原因转储缓存 当用户浏览时 浏览器会缓存图像等 但尚不清楚何时会发出条件 GET 请求
  • Git:取消交互式变基

    我喜欢git rebase i HEAD 5压缩我的承诺 有时我认为我需要返回 5 次提交 但后来意识到我需要 7 次 然而 git 已经调出了 rebase 编辑器 git rebase merge git rebase todo在维姆中
  • Play框架中的异常处理

    我正在使用 play 框架 2 3 x 来构建一个宁静的 API 今天 我在 API 控制器中的所有 api 函数周围有一个 try catch 块 以便能够捕获异常并返回通用的 错误 json 对象 Example def someApi
  • 通过perl脚本在linux中按密码提示登录

    我想通过 Perl 脚本传递密码 我基本上是在编写一个脚本来在 Linux 终端上执行命令 在执行特定命令时 我收到提示 Password I need to enter password here through my script 但是
  • 确定最后单击的项目

    我需要检索导致焦点移出 模糊 事件的 DOM 元素在模糊事件中 以下代码将为我提供失去焦点的元素的 ID 而不是导致该元素失去焦点的元素 这是我需要的第二个元素 live blur function e var id this attr i
  • 在Python中使用循环来命名变量[重复]

    这个问题在这里已经有答案了 如何使用循环来命名变量 例如 如果我想要一个变量double 1 2 double 2 4一直到double 12 24 我该怎么写呢 我感觉它会是这样的 for x in range 1 13 double x
  • jQuery 搜索过滤器 - 在输入框中搜索

    我正在使用 jQuery 搜索过滤器 它运行良好 不过 我还需要在输入框中进行搜索和过滤 输入框都是文本类型 我需要像其他表列中的文本一样使用该值 我创造了一个小提琴 http jsfiddle net ktcle Jf6q5 http j
  • JPA @ManyToOne 在删除最后一个子项时自动删除父项

    我有一个由 ManyToOne 从子级到父级的单向映射 如下所示 ManyToOne JoinColumn name PARENT ID private ParentEntity parent 当最后一个子实体被删除而没有从 ParentE
  • 存储过程未在另一个存储过程中执行

    我发现执行 SP1 时 SP2 不会从 SP1 内执行 SP1的结构如下 ALTER PROCEDURE SP1 AS BEGIN Declare c1 cursor open c1 fetch next from c1 while fet
  • 将多个参数传递给线程函数

    我有一个名为 workForThread 的函数 它接受两个参数 并返回 void 我想使用类似的方法来线程化这个函数 thread workForThread a b Where a and b属于适当的类型 上面的代码无法编译 给出 调
  • Visual Studio 2010 数据比较自动化

    我注意到在高级版数据菜单中带有数据比较选项 它可以满足我需要的一切 只是想知道是否有一种方法可以自动执行我的应用程序中 GUI 中的操作 理想情况下 我想获得不同 左 右行的集合 在这篇博客中 我将引导您了解 Data NewDataCom
  • 使用独特的 bean 进行 spring 自动装配:Spring 期望单个匹配的 bean,但发现了 2 个

    我正在尝试使用 Spring 自动装配一些 bean 用于依赖注入 作为 web 应用程序 一个控制器 bean 包含另一个 bean 而另一个 bean 又保存另一组 bean 的哈希图 目前该地图只有一个条目 当我在 tomcat 中运