Spring-7,bean的关系

来源:互联网 发布:期货交易统计软件 编辑:程序博客网 时间:2024/06/05 03:45

spring中bean之间的关系包含继承和依赖两种

继承

spring bean之间的继承

  1. spring与允许bean继承另外一个bean的配置,被继承的bean称为父bean,继承的bean称为子bean

  2. 子bean从父bean中继承配置,包括bean的属性配置,也可以覆盖父bean的属性,但并不是所有的bean都会被继承(autowire,abstract)

  3. 把父bean设置abstract设置为true,使得父bean称为抽象bean,这样的抽象bean作为配置模板,专门用来被其他bean继承

  4. 抽象bean不会被实例化

  5. 可以在父bean中忽略class属性,让子bean自己制定class属性,但是 父bean必须为抽象bean(abstract=“true”)

例如:
address.java

package com.tuxianchao.spring.beansRelation;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Address {    private String city;    private String street;    private String number;    public static void main(String[] args) {        ApplicationContext ctx = new ClassPathXmlApplicationContext("beanRealtion.xml");        Address address = (Address) ctx.getBean("address");        System.out.println(address);        address = (Address) ctx.getBean("address2");        System.out.println(address);        address = (Address) ctx.getBean("address4");        System.out.println(address);    }    public String getCity() {        return city;    }    public void setCity(String city) {        this.city = city;    }    public String getStreet() {        return street;    }    public void setStreet(String street) {        this.street = street;    }    public String getNumber() {        return number;    }    public void setNumber(String number) {        this.number = number;    }    @Override    public String toString() {        return "Address [city=" + city + ", street=" + street + ", number=" + number + "]";    }}

配置文件:

    <bean id="address" class="com.tuxianchao.spring.beansRelation.Address"        p:city="chengdu" p:street="street1" p:number="001">    </bean>    <!-- address2继承address,使用parent属性,并且覆盖了父bean的number属性 -->    <bean id="address2" parent="address" p:number="002">    </bean>    <bean id="address3" abstract="true" p:city="chengdu"></bean>    <!--这里address4继承了抽象bean address,并且制定了自己的class,覆盖了属性street和number -->    <bean id="address4" parent="address3"        class="com.tuxianchao.spring.beansRelation.Address" p:street="street1"        p:number="001"></bean>

测试:
这里写图片描述

依赖

Spring bean之间的依赖关系

  1. spring允许通过depends-on配置依赖的前置bean,这样一来,依赖的bean会在当前bean的实例创建之前创建好

  2. 依赖的多个前置bean,使用逗号,空格分隔

例如,这里person类有连个属性,分别是address和car

这里写图片描述

这里写图片描述

这里写图片描述

在配置文件中:

    <bean id="addr" class="com.tuxianchao.spring.beansRelation.Address"        p:city="chengdu" p:street="street1" p:number="001"></bean>    <bean id="car" class="com.tuxianchao.spring.beansRelation.Car"        p:brand="Jeep" p:price="400000.0"></bean>    <!--这里perosn实例依赖于addr和car,要求创建person之前必须首先创建car和add,可以使用depends-on来配置这种依赖关系         ,这样确保peerson实例的addr和car不为null -->    <bean id="person" class="com.tuxianchao.spring.beansRelation.Person"        p:name="Mike" depends-on="addr;car" p:address-ref="addr" p:car-ref="car"></bean>
0 0