spring bean的继承和依赖

本文介绍了Spring框架中如何利用继承特性配置bean,包括bean的父子关系、抽象bean的概念以及如何通过depends-on确保bean的依赖顺序。通过实例展示了如何使用`parent`属性和`depends-on`属性来管理和控制bean的实例化过程。
摘要由CSDN通过智能技术生成

bean的继承和依赖

spring除了提供了一般的配置bean的方式之外,还实现了java中继承的特性,设置bean的父子关系,这样对于一些重复的配置就可以进行省略

bean的继承

配置bean的父子关系,父bean有的东西,子bean全部继承过来,不一样的进行覆盖

<!-- bean的继承关系 -->
<bean id="parent" class="com.zhanghe.study.spring4.beans.beantest.Person">
    <property name="name" value="张三"/>
    <property name="car" ref="car"/>
    <property name="cars">
        <list>
            <ref bean="car"/>
            <ref bean="car2"/>
        </list>
    </property>
    <property name="carMap">
        <map>
            <entry key="AA" value-ref="car"/>
            <entry key="BB" value-ref="car2"/>
        </map>
    </property>
</bean>

<!-- 使用parent属性可以继承对应bean的所有属性 -->
<bean id="son" parent="person">
    <property name="name" value="张飞"/>
</bean>
抽象bean

既然spring提供了继承,那么也就存在了专门用于被继承的bean,而不进行实例化,这种bean被称为抽象bean,使用abstract="true"表明这是一个抽象bean

由于抽象bean不进行实例化,所以抽象bean的class属性是没有意义的,可以省略不写

<!-- 抽象bean,不可被实例化-->
<bean id="abstract" abstract="true">
    <property name="name" value="张三"/>
    <property name="car" ref="car"/>
    <property name="cars">
        <list>
            <ref bean="car"/>
            <ref bean="car2"/>
        </list>
    </property>
    <property name="carMap">
        <map>
            <entry key="AA" value-ref="car"/>
            <entry key="BB" value-ref="car2"/>
        </map>
    </property>
</bean>

<!-- 使用parent属性可以继承对应bean的所有属性 -->
<bean id="personSon" class="com.zhanghe.study.spring4.beans.beantest.Person" parent="abstract">
    <property name="name" value="张飞"/>
</bean>

注意:抽象bean是不可以被实例化的,也就是说不可以使用上下文强制的获取该bean,否则会报错

org.springframework.beans.factory.BeanIsAbstractException: Error creating bean with name ‘abstract’: Bean definition is abstract

bean的依赖

有时候需要保证bean实例化的先后顺序,在创建一个bean的时候必须保证另外一个bean也被创建,如果另一个bean不存在,则无法正常实例化该bean

可以使用depends-on来实现bean之间的依赖关系

<!-- 依赖关系 -->
<bean id="person2" class="com.zhanghe.study.spring4.beans.beantest.Person" parent="abstract" depends-on="depend1">
    <property name="name" value="关羽"/>
</bean>

<bean id="depend1" class="com.zhanghe.study.spring4.beans.beantest.Person" parent="abstract">
    <property name="name" value="刘备"/>
</bean>

如果所依赖的bean不存在,实例化失败

警告: Exception encountered during context initialization - cancelling refresh attempt:
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name ‘person2’ defined in class path resource [spring-config.xml]:
‘person2’ depends on missing bean ‘depend1’; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No bean named ‘depend1’ available

https://zhhll.icu/2021/框架/spring/基础/4.bean的继承和依赖/

本文由mdnice多平台发布

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾光师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值