Spring把bean的屬性相關的封裝成BeanDefinition
可以看到BeanDefinition是一個接口,其方法實現在AbstractBeanDefinition
public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccessor implements BeanDefinition, Cloneable {
...省略靜態變量以及final變量
private volatile Object beanClass;
//bean的作用範圍
private String scope;
//是否是抽象類
private boolean abstractFlag;
//是否延遲加載,對應bean的lazy-init
private boolean lazyInit;
/**
* AUTOWIRE_NO = 0;
* AUTOWIRE_BY_NAME = 1;
* AUTOWIRE_BY_TYPE = 2;
* AUTOWIRE_CONSTRUCTOR = 3;
* 自動注入模式
*/
private int autowireMode;
//依賴檢查,Spring3.0後啓用這屬性
private int dependencyCheck;
//用來表示一個bean的實例化依靠另一個bean先實例化,對應bean屬性depend-on
private String[] dependsOn;
//autowire-candidate屬性設置爲false,這樣容器在查找自動裝配對象時,將不考慮該bean,但該bean本身還是可以自動注入其他bean
private boolean autowireCandidate;
//自動裝配出現多個bean候選者是,將作爲首選者,對應bean屬性primary
private boolean primary;
//用於記錄Qualifier,對應子元素qualifier
private final Map<String, AutowireCandidateQualifier> qualifiers;
//允許訪問非公開的構造器和方法,程序設置
private boolean nonPublicAccessAllowed;
//是否一個寬鬆的模式解析構造函數
private boolean lenientConstructorResolution;
//記錄構造函數注入屬性,對應bean屬性constructor-arg
private ConstructorArgumentValues constructorArgumentValues;
//普通屬性集合
private MutablePropertyValues propertyValues;
//方法重寫持有者,記錄lookup-method、replaced-method元素
private MethodOverrides methodOverrides;
//對應bean屬性factory-bean
private String factoryBeanName;
//對應bean屬性factory-method
private String factoryMethodName;
//對應bean屬性init-method
private String initMethodName;
//對應bean屬性destroy-method
private String destroyMethodName;
private boolean enforceInitMethod;
private boolean enforceDestroyMethod;
//是用戶定義的而不是應用程序本身定義時爲false,創建AOP時爲true,程序設置
private boolean synthetic;
/**
* ROLE_APPLICATION = 0 :用戶
* ROLE_SUPPORT = 1:某些複雜配置一部分
* ROLE_INFRASTRUCTURE = 2:完全內部使用,與用戶無關
* 定義這個bean的應用
*/
private int role;
//bean的描述
private String description;
//bean定義的資源
private Resource resource;
...省略getter、setter
}