美文网首页Spring专题
Spring中如何实现BeanDefinition的继承?

Spring中如何实现BeanDefinition的继承?

作者: 自律赢 | 来源:发表于2019-11-18 21:11 被阅读0次

    前言

    BeanDefinition是spring中关于bean的元数据的描述。在spring中无论是xml配置的bean、自动扫描的bean还是java配置的bean最后都会转换成BeanDefinition,再根据这个BeanDefinition来进行bean的创建。BeanDefinition的继承能够简化代码和配置,好处还是很很明显的。

    要实现BeanDefinition的继承,给大家推荐两种方式,一种是xml配置bean时的parent属性,一种是自动扫描时继承带有@Autowired注解属性的父类。

    通过parent属性来继承BeanDefinition

    parent这个属性很容易让人和java的继承联系起来。其实,这个parent和java的继承并没有什么关系,它只是一种Bean Definition的继承,用于简化bean的配置。子BeanDefinition能够继承父Bean Definition的配置信息,也能覆盖和新增配置信息。通常父bean都被设置成抽象类或者在xml中设置其abstract属性为"true"。

    使用parent属性的必要条件就是含有parent属性的bean必须能够接受合并后的BeanDefinition,如果无法接收的话,容器会启动报错。

    下面描述了子BeanDefinition对于父BeanDefinition的继承情况。

    子BeanDefinition能够继承父BeanDefinition的配置:

    1. scop

    2. constructor

    3. property

    4. method overrides

    子BeanDefinition会覆盖父BeanDefinition的配置:

    1.initialization method

    2.destroy method

    3.static factory method settings

    子BeanDefinition不会继承父BeanDefinition的配置:

    1.depends on

    2.autowire mode

    3.dependency check

    4.singleton

    5.lazy init

    代码示例

    下列代码展示了parent属性的用法,其中DerivedTestBean从父BeanDefinition中继承了age属性的配置并覆盖了name属性的配置。

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

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

    通过父类来继承BeanDefinition

    定义父类,下列代码中的父类包含了OtherBean这个属性,它带有Autowired注解,这样在子类中也能够成功被注入。这个父类也可以声明成抽象类。

    public class ParentBean {

        @Autowired

        private OtherBean otherBean;

        public OtherBean getOtherBean() {

            return otherBean;

        }

        public void setOtherBean(OtherBean otherBean) {

            this.otherBean = otherBean;

        }

    }

    子类如下,其并没有声明任何属性,但是能够注入OtherBean这个属性。

    @Component

    public class SubBean extends ParentBean {

    }

    这两种方式在实际的开发过程中都会用到哦,希望小伙伴们都能领会并加以应用。

    以上就是关于BeanDefinition的继承的一些分享,感谢小伙伴们的关注,欢迎留言哦。

    相关文章

      网友评论

        本文标题:Spring中如何实现BeanDefinition的继承?

        本文链接:https://www.haomeiwen.com/subject/kafiictx.html