Spring中的Bean继承关系


写在之前

         最近没事在浏览Spring官网,简单写一些相关的笔记,并不包所有技术点,信息来自Spring5.2.3


        Spring中的Bean继承与Java中的继承不同,  Spring中Bean的继承是实例之间的关系,因此主要表现为参数值的延续;而Java中的继承是类之间的关系,主要表现为方法、属性的延续

1. Spring Bean的继承

    Bean定义可以包含许多配置信息,包括构造函数参数、属性值和容器特定信息,例如初始化方法、静态工厂方法名称等。子Bean定义从父定义继承配置数据。子定义可以根据需要覆盖某些值或添加其他值。使用父Bean和子Bean定义可以节省大量输入。这是一种模板形式

例如:

<bean id="inheritedTestBean" abstract="true"
        class="org.springframework.beans.TestBean">
    <property name="name" value="parent"/>
    <property name="age" value="1"/>
</bean>

<bean id="inheritsWithDifferentClass"
        class="org.springframework.beans.DerivedTestBean"
        parent="inheritedTestBean" init-method="initialize">  
    <property name="name" value="override"/>
</bean>

上面的示例配置,parent="inheritedTestBean" 表示inheritsWithDifferentClass 继承BeaninheritedTestBean . 这个配置中子Bean会继承父Bean的age属性且值为1而dependon、autowire模式、依赖项检查、singleton和lazy init 取自子Bean

前面的示例使用abstract属性显式地将父bean定义标记为abstract。如果父定义没有指定类,则需要显式地将父bean定义标记为抽象

例如:

<bean id="inheritedTestBeanWithoutClass" abstract="true">
    <property name="name" value="parent"/>
    <property name="age" value="1"/>
</bean>

<bean id="inheritsWithClass" class="org.springframework.beans.DerivedTestBean"
        parent="inheritedTestBeanWithoutClass" init-method="initialize">
    <property name="name" value="override"/>
</bean>

上面的示例配置,父bean没有对应的类, 所以父bean不能单独实例化,因为它是不完整的,所以它也被显式标记为抽象的。当定义是抽象的时,它只能作为纯模板bean定义使用

2. Spring的Bean继承和Java继承区别

  • Sping中的子Bean和父Bean可以是不同类型,但Java中的继承则可保证子类是一种特殊的父类。
  • Spring中Bean的继承是实例之间的关系,因此主要表现为参数值的延续;而Java中的继承是类之间的关系,主要表现为方法、属性的延续。
  • Spring中子Bean不可作为父Bean使用,不具有多态性;Java中的子类实例完全可以当成父类实例使用。

摘自李刚老师的《轻量级Java EE企业应用实战(第3版)》
 


上一篇:Spring中的依赖关系(DI)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

=PNZ=BeijingL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值