使用嵌套bean

时间:2017-10-19 15:35:30

标签: spring dependency-injection autowired

我试图使用Spring并且在使用它时遇到问题。 我有以下代码:

<util:map id="someMap" value-type="java.util.Set">
    <entry key="a" value-ref="setA"/>
    <entry key="b" value-ref="setB"/>
</util:map>

<util:set id="setA">
    <value>A</value>
</util:set>

<util:set id="setB">
    <value>B</value>
</util:set>

使用以下Java代码(使用@Qualifier获取&#34; someMap&#34;):

package a.b.c;
public class SomeClass {
    private final Map<String, Set<String>> someMap;
    @Autowired
    public SomeClass(@Qualifier("someMap") final Map<String, Set<String>> someMap) {
        this.someMap = someMap;
    }
}

并且它给了我以下错误:

  

org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为&#39; abcSomeClass&#39;的错误:通过构造函数参数表达的不满意的依赖关系,类型为[java.util.Map]的索引2 ::不匹配找到依赖项[map with value type java.util.Set]的[java.util.Set]类型的bean:预期至少有1个bean,它有资格作为此依赖项的autowire候选者。依赖注释:{@ org.springframework.beans.factory.annotation.Qualifier(value = someMap)};嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖[map with value type java.util.Set]找到类型为[java.util.Set]的匹配bean:期望至少有一个bean有资格作为autowire候选者对于这种依赖。依赖注释:{@ org.springframework.beans.factory.annotation.Qualifier(value = someMap)}

看起来它找不到套装但我不知道它为什么会发生。你会如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我希望您使用的是4.3或更高版本的弹簧 尝试添加mapclass,key-type

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

答案 1 :(得分:0)

我找到了解决这个问题的方法。我不得不使用@Value("#{@someMap}")而不是@Qualifier("someMap")