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)。 }

相關文章
相關標籤/搜索