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

Spring Java配置包装注入的地图

严永丰
2023-03-14
问题内容

最近,我从使用Spring的XML配置切换到了Java配置,并遇到了一个奇怪的问题。

XML配置为:

<util:map id="myMap">
    <entry key="a" value="aValue"/>
    <entry key="b" value="bValue"/>
    <entry key="c" value="cValue"/>
</util:map>

<bean id="myBean" class="my.MyClass">
    <property name="myMap" ref="myMap"/>
</bean>

Java配置为:

@Bean
public Map<String, Object> myMap() {

    Map<String, Object> myMap = new HashMap<>();
    myMap.put("a", "aValue");
    myMap.put("b", "bValue");
    myMap.put("c", "cValue");

    return myMap;
}

@Bean
public MyClass myBean(@Qualifier("myMap") final Map<String, Object> myMap) {

    MyClass myBean = new MyClass();
    myBean.setMyMap(myMap);

    return myBean;
}

两种bean在不同的文件中声明,我在这里将它们分组以便于阅读。该映射也包含引用,而不仅仅是字符串。

我希望能够myMap在第二个bean中使用,但Spring会注入以下映射:

{ myMap = { a=aValue, b=bValue, c=cValue } }

我不明白为什么Spring会将地图包装到另一个地图中,以及为什么它与XML配置的行为方式不同。

有任何想法吗?


问题答案:

有一个问题@Autowired-Map甚至定义了bean的名称,并且由于注释,您不能使用建议的@Resource注释,因此可以使用@Value定义bean
的注释来替代:

@Bean
public MyClass myBean(@Value("#{myMap}") final Map<String, Object> myMap) {
//..
}


 类似资料:
  • 我最近从使用Spring的XML配置切换到Java配置,遇到了一个奇怪的问题。 XML配置为: 有什么想法吗?

  • 在Spring Hibernate XML配置中,我有 我知道SpringJava配置的等价物如下:LocalSessionFactoryBuilder(dataSource())。AddAnnotatedClass(Foo.class)。buildSessionFactory(); 我的问题是,如果我不使用LocalSessionFactoryBuilder类,而是使用HibernateJpaV

  • 本文向大家介绍Windows下maven安装配置图文教程(包括本地化仓库配置),包括了Windows下maven安装配置图文教程(包括本地化仓库配置)的使用技巧和注意事项,需要的朋友参考一下 一、下载maven maven官网:http://maven.apache.org/ 下载下来也就是一个压缩文件,解压。我下载的是3.5.2版本,解压之后如下: 路径为 :D:\Program Files\a

  • 我试图使用-@runwith(SpringJUnit4ClassRunner.class)@ContextConfiguration({“classpath:some.xml”})运行spring JUnit测试用例 xml在内存db详细信息中定义了bean

  • 我对格拉德尔很陌生,我现在正在努力学习。我成功地将gradle配置为一个非常简单的项目。目前我正在努力学习gradle包装器。它规定我不需要在我的系统上下载gradle。我可以在构建中添加任务包装器。gradle文件并运行任务gradle包装器。它应该下载gradle并创建gradlew。蝙蝠档案。 对不起,我太天真了,但我不太明白。如果我的机器上没有安装gradle,将如何运行该任务。 谢谢

  • spring日志中的info消息显示: 示例: 下面有一个简单的示例,可以使用。这里,Bar是嵌套在Foo内部的,我需要模拟Bar进行测试: 现在对于测试来说,假设我想注入一个mockbar而不是真正的bar。我如何在下面的测试类中实现这一点? 实际测试用例: