关于两个配置文件中,name重复的问题

关于两个配置文件中,name重复的问题

applicationContext.xml

<bean name="apple2" class="com.imooc.spring.ioc.entity.Apple">
    <constructor-arg name="title" value="红富士"/>
    <constructor-arg name="color" value="红色"/>
    <constructor-arg name="origin" value="欧洲"/>
    <constructor-arg name="price" value="19.8"/>
</bean>

applicationContext-1.xml

<bean name="apple2,apple7" class="com.imooc.spring.ioc.entity.Apple">
    <constructor-arg name="title" value="红富士2号"/>
    <constructor-arg name="color" value="红色"/>
    <constructor-arg name="origin" value="欧洲"/>
    <constructor-arg name="price" value="29.8"/>
</bean>

此时,

String[] configLocations = new String[]{"classpath:applicationContext-1.xml","classpath:applicationContext.xml"};

ApplicationContext context = new ClassPathXmlApplicationContext(configLocations);
Apple apple7 = context.getBean("apple7", Apple.class);
System.out.println(apple7.getTitle());

此时输出为什么是   红富士   而不是  apple7对应的  红富士2号

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,先加载applicationContext-1.xml配置文件,后加载applicationContext.xml配置文件时,获得apple7,测试输出的是红富士,覆盖了之前的bean。

这是因为applicationContext-1.xml中bean的name值有apple2和apple7。applicationContext.xml中有bean的name值有apple2,name值有一样的,所以就会覆盖之前的bean。

祝:学习愉快~

好帮手慕阿满 2020-09-25 18:19:53

同学你好,经过对比,发现同学配置文件的加载顺序是先加载applicationContext-1.xml配置文件,然后是applicationContext.xml配置文件,如:

http://img1.sycdn.imooc.com/climg/5f6dc0f509184aa408040080.jpg

这里是获取名为apple7的bean,该bean还有一个名字为apple2,随后加载applicationContext.xml配置文件时,该文件中名为apple2的bean覆盖之前名为apple2的bean,所以最后的输出结果是红富士,而不是红富士2号。

如果同学想查询到红富士2号,可以调换一下加载配置文件的顺序。

祝:学习愉快~

  • 提问者 mahsiaoko #1
    我不太懂的是指明了是apple7,为什么还会因为它有另一个名字apple2然后被新加载的文件覆盖掉
    2020-09-26 11:42:24
好帮手慕阿满 2020-09-25 17:36:29

同学你好,测试输出的是红富士2号,而不是红富士,如:

http://img1.sycdn.imooc.com//climg/5f6db9f609ff11cc14700440.jpg

建议同学重新运行再试试。

祝:学习愉快~

  • 提问者 mahsiaoko #1
    我这边测试了好几次都是 红富士
    2020-09-25 17:50:12
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师