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