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
}