美文网首页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