【Spring】Bean之间的关系

版权声明:本文内容来源于网络,如有侵权请联系删除 https://blog.csdn.net/ZyhMemory/article/details/88560775

关系

继承

抽象 bean:bean 的 abstract 属性为 true 的 bean,这样的 bean 不能被 IOC 容器实例化,只用来被继承配置,若某一个 bean 的 class 属性没有指定,则该 bean 必须是一个抽象 bean

    <bean id="address" p:city="BeiJing^" p:street="WuDaoKou" abstract="true"></bean>

    <!-- bean 配置的继承: 使用 bean 的 parent 属性指定继承哪个 bean 的配置 -->
    <bean id="address2"  class="com.test.sping.beans.autowire.Address"
          parent="address"></bean>

    <bean id="address3"  class="com.test.sping.beans.autowire.Address"
          p:street="DaZhongSi" parent="address2"></bean>

注意一个问题,我用的idea,创建继承会报错,不用管它,直接运行就好了,没问题

依赖

要求在配置 Person 时,必须有一个关联的 car! 换句话说 person 这个 bean 依赖于 Car 这个 bean

    <bean id="car" class="com.test.sping.beans.autowire.Car"
        p:brand="Audi" p:price="300000"></bean>

    <bean id="person" class="com.test.sping.beans.autowire.Person"
        p:name="Tom" p:address-ref="address2" depends-on="car"></bean>

源码

Main.class(com.test.sping.beans.relation.Main)

package com.test.sping.beans.relation;


import com.test.sping.beans.autowire.Address;
import com.test.sping.beans.autowire.Person;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

    public static void main(String[] args) {

        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-relation.xml");

        Address address = (Address) ctx.getBean("address3");
        System.out.println(address);

        address = (Address) ctx.getBean("address2");
        System.out.println(address);

        Person person = (Person) ctx.getBean("person");
        System.out.println(person);

    }

}

beans-relation.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:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 抽象 bean:bean 的 abstract 属性为 true 的 bean,这样的 bean 不能被 IOC 容器实例化,只用来被继承配置
        若某一个 bean 的 class 属性没有指定,则该 bean 必须是一个抽象 bean-->
    <bean id="address" p:city="BeiJing^" p:street="WuDaoKou" abstract="true"></bean>

    <!-- bean 配置的继承: 使用 bean 的 parent 属性指定继承哪个 bean 的配置 -->
    <bean id="address2"  class="com.test.sping.beans.autowire.Address"
          parent="address"></bean>

    <bean id="address3"  class="com.test.sping.beans.autowire.Address"
          p:street="DaZhongSi" parent="address2"></bean>

    <bean id="car" class="com.test.sping.beans.autowire.Car"
        p:brand="Audi" p:price="300000"></bean>

    <!-- 要求在配置 Person 时,必须有一个关联的 car! 换句话说 person 这个 bean 依赖于 Car 这个 bean -->
    <bean id="person" class="com.test.sping.beans.autowire.Person"
        p:name="Tom" p:address-ref="address2" depends-on="car"></bean>

</beans>

猜你喜欢

转载自blog.csdn.net/ZyhMemory/article/details/88560775