当前位置: 首页 > news >正文

spring bean的继承和依赖

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 多平台发布

http://www.lryc.cn/news/339862.html

相关文章:

  • Swift中的字符串
  • MySQL基础-----约束详解
  • 【Unity】游戏场景添加后处理特效PostProcessing
  • STM32芯片软复位导致SRAM2的值被擦除话题
  • 【C++航海王:追寻罗杰的编程之路】异常——错误处理方式之一
  • 5.2 mybatis之autoMappingBehavior作用
  • 【算法一则】做算法学数据结构 - 简化路径 - 【栈】
  • OpenHarmony实战开发-如何使用Web预渲染实现功能介绍。
  • 三七互娱,oppo,快手25届暑期实习内推
  • InnoDB架构:内存篇
  • 8个Python高效数据分析的技巧
  • 暴力破解密码自动阻断
  • 【华为】Telnet实验配置
  • SAM功能改进VRP-SAM论文解读VRP-SAM: SAM with Visual Reference Prompt
  • MySQL truncate table 与 delete 清空表的区别和坑
  • Spring GA、PRE、SNAPSHOT 版本含义及区别
  • 一文看懂标准版和Pro版的区别
  • 腾讯云服务器价格表(腾讯云服务器报价表)
  • 试试把GPT和Suno结合起来用(附免费GPT)
  • SpringBoot修改菜品模块开发
  • Rust开发笔记 | 系统编程的守护神
  • dcoker+nginx解决前端本地开发跨域
  • 基于云开发和微信小程序的爱宠家系统
  • 光场相机建模与畸变校正改进方法
  • 面试算法-173-二叉树的直径
  • Python Typing模块
  • 【鸿蒙开发】饿了么页面练习
  • 鸿蒙开发学习笔记第一篇--TypeScript基础语法
  • Java基础知识总结(55)
  • python爬虫 - 爬取微博热搜数据