spring全家桶之springIOC篇 —— (7)、bean的继承与依赖关系

bean的继承关系

bean之间可以继承,子bean可以继承父bean的属性,这很好理解。看代码

<bean id="car_father" class="com.yusys.spring.Car">
    <property name="brand" value="bmw"></property>
    <property name="price" value="111111"></property>
</bean>

<bean id="car_child" parent="car_father">

父bean配置了属性,子bean没有配置
测试:

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

Car car_father = (Car) ctx.getBean("car_father");
System.out.println(car_father);

Car car_child = (Car) ctx.getBean("car_child");
System.out.println(car_child);

结果:
这里写图片描述

结论:子bean继承了父bean的属性,包括class属性,当然id是唯一的不可被继承。

有时候,被继承的父bean不需要被实例化,可以将其抽象

 <bean id="car_father" abstract="true">
   <property name="brand" value="bmw"></property>
    <property name="price" value="111111"></property>
</bean>
  • 抽象的bean不能被实例化
  • 抽象的bean可以不指定class
  • abstract属性是不会被继承的
  • 子bean可以配置属性覆盖父bean属性

bean的依赖关系

指定某个bean初始化必须依赖于另一个bean,如果其依赖的bean不存在,则其初始化失败。

<bean id="person" class="com.yusys.spring.Person" depends-on="car">
    <property name="name" value="小明"></property>
    <property name="age" value="10"></property>
    <!-- 如果手动装配,这里有要配置car属性  -->

</bean>

这里我们使用depends-on=”car”设置了person 依赖于car这个bean,但是我们又没有定义car这个bean,所以person初始化失败。
测试类:

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Person p = (Person) ctx.getBean("person");
System.out.println(p);

结果:
这里写图片描述

修改配置文件,定义person的依赖bean:

<bean id="car" class="com.yusys.spring.Car">
    <property name="brand" value="BMW"></property>
    <property name="price" value="1000"></property>
</bean>

<bean id="person" class="com.yusys.spring.Person" depends-on="car">
    <property name="name" value="小明"></property>
    <property name="age" value="10"></property>
    <!-- 如果手动装配,这里有要配置car属性  -->

</bean>

测试结果:
这里写图片描述

如果依赖多个bean,可以使用逗号或者空格隔开
依赖bean不是引入了bean,只是定义了当前bean初始化的依赖的bean,如果需要使用这个bean还是要配置引入才行。

猜你喜欢

转载自blog.csdn.net/abc997995674/article/details/80279223