当前位置: 首页 > 知识库问答 >
问题:

使用Spring/JSR-330注入映射时出错

田翰林
2023-03-14

我有两个maven项目,一个web-app和一个“服务”项目。我正在用Spring把所有东西连在一起。我想在application-context.xml中创建一个映射,并将其注入到我的类中。当我尝试启动我的web应用程序时,我得到一个错误消息

 @Named("tranformer")
 public class IdentifierTransformerImpl implements IdentifierTransformer {


private Map<String, String> identifierMap;

@Inject
public IdentifierTransformerImpl(
        @Named("identifierMap")
        final Map<String, String> identifierMap) {
            this.identifierMap= identifierMap;
}
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-3.0.xsd"

  <util:map id="identifierMap" map-class="java.util.HashMap">
    <entry key="Apple" value="fruit"/>
    <entry key="BlackBerry" value="fruit"/>
    <entry key="Android" value="robot"/>
   <util:map>

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

我得到以下错误:

 ..... 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: {@javax.inject.Named(value=identifierMap)

当我在应用程序上下文中定义一个字符串,并且构造函数将其注入到类中时,这是可行的,我如何对映射做同样的操作呢?

共有1个答案

羊煜
2023-03-14

我认为@inject或@autowired注释不支持地图集合(参见:Spring不能自动连接地图bean)。然而,我通过将地图注释为一个资源,成功地自动生成了一个地图,正如这个答案所建议的那样。试试看:

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

缺点当然不是构造函数自动生成,而是一个字段。我还没有找到一种通过构造函数自组织来实现的方法

 类似资料:
  • 到底是怎么回事? 提前谢了。

  • 我们使用的是Spring Boot2。 我们想使用Spring Boot的刷新机制,但是由于一个bug我们不能使用,因此我们不得不用和替换所有这些。 所以我们用了: 例如,使用该YAML文件: null 但是我们不能使用其他类型的属性绑定,因为我们正在将这个应用程序部署到kubernetes中,并使用kubernetes的配置映射。 所以我们想知道,是否还有其他机会让与一起工作

  • 问题内容: 我有一个带有以下内容的Spring Boot应用程序-基本上是从这里获取的: 我可以注入特定的值,例如 但是,我想注入整个地图,例如: 那(或类似的东西)可能吗?显然,我可以直接加载yaml,但是想知道Spring是否已经支持了某些东西。 问题答案: 你可以使用插入地图 使用问题中的yaml运行它会产生: 有多种选项可用于设置前缀,控制如何处理缺少的属性等。有关更多信息,请参见java

  • 我有一个带有以下的spring boot应用程序--基本上取自这里: 我可以注入特定的值,例如。 然而,我想注入整个地图,即如下所示: 那(或类似的事情)可能吗?显然,我可以直接加载yaml,但我想知道spring是否已经支持了一些东西。

  • 我有一个配置YAML(application.yml)文件,其中包含位置数据: 我想加载它,以便它在html选择字段中可用。 我创建了以下类: 然后我通过@Autowire将CountryOptions注入Controller。但是控制器中的国家列表为空。 应用程序的配置由包含以下注释的类提供: 控制器代码 那么-有什么想法为什么国家列表不是从yaml文件创建的吗?