当前位置: 首页 > 面试题库 >

Spring无法自动连线Map Bean

明正德
2023-03-14
问题内容

我在Spring定义了这样的地图:

<util:map id="AdditionalParams" scope="prototype" map-class="java.util.HashMap" 
          key-type="java.lang.String" value-type="java.lang.String">

    <entry key="Start" value="12345" />
    <entry key="Finish" value="12365" />
</util:map>

然后,我将该bean自动装配为定义为的属性:

private @Autowired @Qualifier(value = "AdditionalParams") Map<String, String> additionalParams;

这样做时,会抛出一个异常,说:

`Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘DutyCreator’: Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private java.util.Map DutyCreator.additionalParams; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [java.lang.String] found for dependency [map with value type java.lang.String]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=AdditionalParams)}

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [java.lang.String] found for dependency [map with value type java.lang.String]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true), @org.springframework.beans.factory.annotation.Qualifier(value=AdditionalParams)}`

有任何想法吗?


问题答案:

从Spring 4.3开始,@Autowired 可以注入列表和地图,问题中的给定代码将起作用:

也就是说,从4.3版本开始,@Autowired只要元素类型信息保留在@Bean返回类型签名或集合继承层次结构中,就可以通过Spring的类型匹配算法来匹配集合/映射和数组类型。

但是在较低的Spring版本中,你无法自动连接这样的集合。但是,你可以执行以下操作:

@Resource(name="AdditionalParams")
private Map<String, String> additionalParams;

甚至:

@Value("#{AdditionalParams}")
private Map<String, String> additionalParams;

检查spring文档,提示部分:

本身定义为集合或映射类型的bean不能通过@Autowired注入,因为类型匹配不适用于它们。将@Resource用于此类bean



 类似资料:
  • 问题内容: 需要一些帮助,我刚刚开始学习Spring,似乎无法弄清楚我们的错: Application.java-没有包 User.java-包com.mapping UserDAO.java-包com.accesors Root.java-包com.controllers 当我运行项目时,我似乎得到了以下启示 堆栈跟踪: 据我了解,这意味着@ComponentScan没有检测到软件包 问题答案:

  • 代码完成了这项工作,创建了repo HashMap对象({})。然而,我试图让repo映射对象由Spring生成。所以我把DataRepoImpl改成: 然而,当我重构帐户ID和地图键到字符串类型,我能够产生HashMap包含一个'假人'变量,这是奇怪的: 回到Integer,我无法修复错误,然后我尝试将自动连线移到DataRepoImpl类的空构造函数: 然而,我从repo得到空值,因为(我的假

  • 我们正在使用Spring框架5和Spring Boot 2.0.0。M6,我们也在使用WebClient进行反应式编程。我们为我们的反应式Restendpoint创建了测试方法,所以我查找了一些关于如何做到这一点的例子。我发现这个或这个以及许多其他的都一样。他们只是自动绑定一个WebTestClient。所以我尝试了同样的方法: 我无法运行此操作,因为我收到错误信息: 因此,似乎不存在自动配置。我

  • 在试图通过浏览器访问我的应用程序时,我遇到了不少错误。错误包括: 无法自动连线方法:public void com。ProjectOne。Util。自定义HibernatedAOSupport。anyMethodName(org.hibernate.SessionFactory);嵌套的异常是org。springframework。豆。工厂NoSuchBeanDefinitionException

  • 问题内容: 如果Service类使用Validated注释进行注释,则同一类无法自动装配自身。 这是在Spring Context尝试加载时引发的异常: 同样,当您有很多依赖于类的自身时,就会发生这种情况(当某个服务使用使用第一个服务的其他服务时)。我想知道@Validated注解,但是我总是在bean上遇到同样的错误。 有人知道我该怎么解决吗? 问题答案: 在这种情况下,注释与错误的自动装配无关

  • 我是的新手,我想向注入一个假客户机,但我得到一个错误(请求的bean当前正在创建中:是否存在不可解析的循环引用) 4.错误信息