【Spring】05 Bean之间的关系

关系

继承

抽象 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>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值