spring中的配置文件导入多个bean.xml文件,有id相同的bean

本文通过实例演示了在Spring框架中,当多个XML配置文件定义了相同ID的Bean时,最终加载的Bean取决于配置文件的导入顺序。并进一步探讨了在主配置文件中直接定义同名Bean时的加载结果。

例如在applicationx.xml,导入test1.xml和test2.xml  如下所示

application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <import resource="test1.xml"/>
    <import resource="test2.xml"/>
</beans>

test1.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="test" class="com.sunshine.pojo.Student" init-method="test1"/>

</beans>

test2.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="test" class="com.sunshine.pojo.Student" init-method="test2"/>

</beans>

 Student类

public class Student {

    private String id;

    private String grade;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public void test1() {
        System.out.println("11111111");
    }
    public void test2() {
        System.out.println("2222222222");
    }

    public void test() {
        System.out.println("0000000");
    }
}

测试

@Test
    public void testSpring() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Object test = context.getBean("test");
        System.out.println(test);
    }

测试结果与application中的导入其他配置文件的顺序有关 :

1、

<import resource="test1.xml"/>

<import resource="test2.xml"/>

结果

2222222222
com.sunshine.pojo.Student@29176cc1

2、

<import resource="test2.xml"/>

<import resource="test1.xml"/>

结果

11111111
com.sunshine.pojo.Student@29176cc1

结论:

当导入多个配置文件,含有相同的bean,获取到的bean是最后一个配置文件的。

 

彩蛋:

<import resource="test2.xml"/>
<import resource="test1.xml"/>
<bean id="test" class="com.sunshine.pojo.Student" init-method="test"/>

结果:

0000000
com.sunshine.pojo.Student@29176cc1

当主配置文件中也定义了这个bean,定义这个bean的顺序在其他配置文件的后面,在用户获取的bean为主配置文件中的bean。

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值