spring系列2:BeanDefinition(下)

前言

前面上篇介绍了 BeanDefinition 接口,Spring 对其 Bean 的定义。

竟然已经对 Bean 建模了,那么接下来就是具体实现。这篇就是介绍主要的实现类。

AbstractBeanDefinition

AbstractBeanDefinition 是 BeanDefinition 的直接实现类,从类名也知道,它是一个抽象的 BeanDefinition,还不够具体。

AbstractBeanDefinition 已经对 BeanDefinition 方法有了基本实现逻辑,增加了许多新的属性(默认属性)。

看一些主要的默认属性

public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccessor
        implements BeanDefinition, Cloneable {

    // 默认作用域
    public static final String SCOPE_DEFAULT = "";


    // 四种注入模型
    public static final int AUTOWIRE_NO = AutowireCapableBeanFactory.AUTOWIRE_NO;

    public static final int AUTOWIRE_BY_NAME = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME;

    public static final int AUTOWIRE_BY_TYPE = AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE;

    public static final int AUTOWIRE_CONSTRUCTOR = AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR;


    // 默认注入模型为 AUTOWIRE_NO
    private int autowireMode = AUTOWIRE_NO;


    // 以下是实现 BeanDefinition 接口里的方法所需定义的属性
    @Nullable
    private String[] dependsOn;

    private boolean autowireCandidate = true;

    private boolean primary = false;

    ...

    @Nullable
    private String factoryBeanName;

    @Nullable
    private String factoryMethodName;

    @Nullable
    private ConstructorArgumentValues constructorArgumentValues;

    @Nullable
    private MutablePropertyValues propertyValues;

    private MethodOverrides methodOverrides = new MethodOverrides();

    @Nullable
    private String initMethodName;

    @Nullable
    private String destroyMethodName;

    private boolean enforceInitMethod = true;

    private boolean enforceDestroyMethod = true;

    private int role = BeanDefinition.ROLE_APPLICATION;

    @Nullable
    private String description;

    @Nullable
    private Resource resource;

RootBeanDefinition

RootBeanDefinition 继承了 AbstractBeanDefinition,这是一个具体 BeanDefinition,有实际作用。

A root bean definition represents the merged bean definition that backs a specific bean in a Spring BeanFactory at runtime.

一个 RootBeanDefinition 表示它是一个可合并的 BeanDefinition,会在 BeanFactory 解析的时候合成一个完整的 BeanDefinition

如果不理解上面意思也没关系,只需要记住这个 RootBeanDefinition 在实例化一个 Bean 的时候,需要与其他的 BeanDefinition 进行合并。比如这个 Bean 继承了某个类或继承了某个 Bean,亦或是实现了某个接口。

ChildBeanDefinition

ChildBeanDefinition 继承了 AbstractBeanDefinition,这也是一个具体 BeanDefinition,同样有着实际作用。

Bean definition for beans which inherit settings from their parent. Child bean definitions have a fixed dependency on a parent bean definition.

一个 ChildBeanDefinition 需要依赖一个 RootBeanDefinition,它表示这个 BeanDefinition 可以继承他的父类设置

GenericBeanDefinition

这个 BeanDefinition 同样继承了 AbstractBeanDefinition

GenericBeanDefinition is a one-stop shop for standard bean definition purposes.

它用来表示一个普通的 Bean,没特别的作用。

AnnotatedGenericBeanDefinition

这个 BeanDefinition 继承了 GenericBeanDefinition

Extension of the GenericBeanDefinition class, adding support for annotation metadata exposed

它只是在 GenericBeanDefinition 基础上添加了对注解的支持。通过它可以很方便的获得 BeanDefinition 上的注解信息。

ScannedGenericBeanDefinition

这个 BeanDefinition 同样继承了 GenericBeanDefinition

Extension of the GenericBeanDefinition class, based on an ASM ClassReader, with support for annotation metadata exposed

它比 AnnotatedGenericBeanDefinition 多了个用于 ASM 技术类解析的支持。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值