学习Spring(四) -- Spring的继承与依赖

本文深入探讨了Spring框架中的继承与依赖机制,通过具体示例展示了如何利用parent属性实现配置信息的继承,以及如何通过depends-on属性强制一个bean依赖另一个bean。通过实例演示了如何在配置文件中实现抽象类和具体类之间的关系,以及依赖注入的用法。

继承

    在spring配置文件中,在bean元素里可以使用parent属性来实现配置信息的继承,比如需要十个学生类的bean,其中只有name属性值不同,其他属性都相同:

    <bean id="student1" class="..." p:school="UCLA" p:name="s1" ...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s2"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s3"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s4"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s5"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s6"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s7"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s8"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s9"...(其他属性) />

    <bean id="student1" class="..." p:school="UCLA" p:name="s10"...(其他属性) />

    在这种情况下可以使用parent属性来解决配置信息重复的问题:

<!-- 继承配置 -->
    <bean id="abstract_student" p:name="Lily" p:school="UCLA"
        abstract="true"></bean>
    <bean id="student2" class="cn.net.bysoft.lesson3.Student" parent="abstract_student"></bean>
    <bean id="student3" class="cn.net.bysoft.lesson3.Student" p:name="Jordan"
        p:school="NCSU" parent="abstract_student"></bean>

    其中第一个bean是abstract_student,该类有一个属性是abstract=true,将这个bean定义为抽象的,这个bean将不可以被容器get到。接下来的两个bean的parent属性都等于第一个bean的id,也就是继承了抽象bean的配置信息,可以通过重写属性来覆盖抽象bean的配置信息。

@Test
    public void testParent() {
        Student student2 = (Student) ctx.getBean("student2");
        Student student3 = (Student) ctx.getBean("student3");
        System.out.println(student2);
        System.out.println(student3);
        /**
         * output:Student [name=Lily, school=UCLA] 
         * Student [name=Jordan, school=NCSU]
         * */
    }

依赖

    在spring配置文件中,可以强制使一个bean依赖另一个bean,比如,在创建一个person对象时,必须在配置文件中存在一个car的bean。

    使用depends-on属性可以做到以上描述:

<!-- 依赖配置 -->
    <bean id="car3" class="cn.net.bysoft.lesson3.Car" p:name="Audi"
        p:maxSpeed="300" p:price="500000.00" p:color="Red"></bean>
    <bean id="person1" class="cn.net.bysoft.lesson3.Person" p:name="James"
        depends-on="car100" p:car-ref="car3"></bean>

    person1这个bean中的属性depends-on=car100,但是我们的配置文件中没有id=car100的bean,于是在getbean时会发生异常:

@Test
    public void testDependsOn() {
        Person person = (Person) ctx.getBean("person1");
        System.out.println(person);
        /**
         * :警告: Exception encountered during context initialization - cancelling
         * refresh attempt:
         * org.springframework.beans.factory.NoSuchBeanDefinitionException: No
         * bean named 'car100' is defined
         * */
    }

    配置文件中,有一个car3,所以将depends-on=car3,在进行测试:

<!-- 依赖配置 -->
    <bean id="car3" class="cn.net.bysoft.lesson3.Car" p:name="Audi"
        p:maxSpeed="300" p:price="500000.00" p:color="Red"></bean>
    <bean id="person1" class="cn.net.bysoft.lesson3.Person" p:name="James"
        depends-on="car3" p:car-ref="car3"></bean>
@Test
    public void testDependsOn() {
        Person person = (Person) ctx.getBean("person1");
        System.out.println(person);
        /**
         * output:Person [name=James, car=Car [name=Audi, maxSpeed=300,
         * price=500000.0, color=Red]]
         * */
    }

    以上是spring配置文件的继承与依赖机制。

转载于:https://my.oschina.net/u/2450666/blog/661510

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值