spring-bean之BeanDefinition

// BeanDefinition 接口用于描述一个spring bean 实例, 通常地bean实例有属性(kv pair)、构造参数值(kv pair)、由具体实现类提供的更多的实例信息。
这个接口是描述bean instance的最小接口: 主要的目的是容许BeanFactoryPostProcessor(好比 PropertyPlaceholderConfigurer)查看、修改bean instance的属性值(kv pair)和bean instance的其余元数据信息(bean metadata)
public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement {
    
    // 忽略spring bean的scope(SINGLETON, PROTOTYPE)程序员

    // 忽略spring bean在整个应用中扮演的角色role(APPLICATION[能够被程序员直接使用的spring bean], SUPPORT[应用配置中起支撑性做用的spring bean], INFRASTRUCTURE[为整个应用提供后台支持的spring bean])spring

    // 设置当前spring bean的parent name... 
    void setParent(String parentName);框架

    // 返回parent BeanDefinition的name
    String getParent();工具

    // [WARNING: don't Understand!!!!!!!!!!]???获取bean definition的当前bean class name。[NOTE]: 这个bean class name 并不必定是运行时的真正的class name,好比一个子spring bean(child bean definition)重写(继承)了父类的class name。还有,这可能仅仅是调用factory method的类。所以, 不要把这个考虑成运行时的声明式bean type,而只是用它在单个的bean definition 级别上解析。???
    String getBeanClassName();post

    // 设置bean definition的bean class name。[NOTE]: 这个bean class name 能够在bean factory post-processing期间被修改, 一般会使用将原始类型解析而成的变种,去替换原始类名。
    void setBeanClassName(String beanClassName);对象

    // ignore bean definition 中scope 的getter setter继承

    // 设置初始懒加载。[NOTE]: 若是为false, 则bean 将会在启动的时候就被bean factories实例化, 这些bean factories会当即初始化这些单例bean definition.
    void setLazyInit(boolean lazyInit);接口

    // spring bean是否应该被懒加载, 即 不会在启动的时候当即加载。这个懒加载只适用于单例bean -> bean definition's scope = Singleton
    boolean isLazyInit();ip

    // 设置当前spring bean初始化所需的依赖beans 名称(全部须要依赖的bean name)。这个bean factory 将会保证这些被依赖的spring beans 先于当前spring bean被初始化。
    void setDependsOn(String... dependsOn);资源

    // 获得当前spring bean所须要的依赖。
    String[] dependsOn();

    // 设置当前spring bean是否符合被环绕到其余bean中的条件。[NOTE]: 这个标记仅仅是用来影响按类型自动环绕的方式。它不会影响按名字自动环绕的引用,尽管指定的spring bean不会被标记为autowire candidate,可是按名字自动环绕的引用仍然会被解析。所以, 不管如何,只要名字匹配,自动环绕都会被注入到依赖的spring bean中。
    void setAutowireCandidate(boolean autowireCandidate);

    // 这个spring bean是否符合被自动环绕到其余spring bean的条件。
    boolean isAutowireCandidate();

    // 设置这个spring bean 是不是一个主要的而自动环绕对象。
    void setPrimary(boolean primary);

    // 这个spring bean是不是主要的自动环绕合格对象。 
    boolean isPrimary();

    // 指定须要用的factory bean.[NOTE]: 在指定的factory bean上调用factory method
    void setFactoryBeanName(String factoryBeanName);

    // 返回factory bean name
    String getFactoryBeanName();

    // 设置factory method。这个方法调用的时候, 会用到当前spring bean的构造参数, 若是spring bean中没有指定,就无需构造参数调用factory bean's method。
    void setFactoryMethodName(String factoryMethodName);

    // 获得factory bean's method
    String getFactoryMethodName();

    // 获得spring bean的构造参数及其值。[NOTE]: 这个方法返回值能够在bean factory post-processing期间被修改。
    ConstructorArgumentValues getConstructorArgumentValues();

    // 获得当前spring bean中的属性及其值。[NOTE]: 返回值能够在bean factory post-processing期间被修改。
    MutablePropertyValues getPropertyValues();

    /**
    如下是BeanDefinition的只读属性
    */

    // 当前spring bean 是不是单例
    boolean isSingleton();

    // 当前spring bean是不是原型
    boolean isPrototype();

    // 当前spring bean是不是抽象的???即 当前spring bean不会被实例化(抽象类是不能实例化滴)
    boolean isAbstract();

    // 获得当前spring bean's Role的信息。spring bean的role 信息为spring 框架和工具提供BeanDefinition的重要程度。
    int getRole();

    // 返回一个便于阅读的BeanDefinition描述。
    String getDescription();

    // 返回与当前BeanDefinition相关的资源描述。
    String getResourceDescription();

    // 返回原始的BeanDefinition, 若是没有就返回null。 须要考虑有可能会获取到被装饰的BeanDefinition。[NOTE]: 这个方法只返回直接的原始BeanDefinition, 即当前spring bean的直接父类, 所以, 若是想获取到最原始(用户定义的原始BeanDefinition)则须要依次遍历原始类链(originator chain)。 }

相关文章
相关标签/搜索