AbstractBeanDefinition.java
private volatile Object beanClass;
//bean的作用范围,对应bean属性的scope
//public static final String SCOPE_DEFAULT = "";
private String scope = SCOPE_DEFAULT;
//是否是单例,来自bean属性的scpoe
private boolean singleton = true;
//是否是原型,来自bean属性的scope
private boolean prototype = false;
//是否是抽象,对应bean属性的abstract
private boolean abstractFlag = false;
//是否延迟加载,对应bean属性lazy-init
private boolean lazyInit = false;
//自动注入模式,对应bean属性的autowire
//int AUTOWIRE_NO = 0;;
private int autowireMode = AUTOWIRE_NO;
//以来检查,spring3.0后启用这个属性
private int dependencyCheck = DEPENDENCY_CHECK_NONE;
//用来表示一个bean的实例化依靠另外一个bean先实例化,对应bean属性depend-on
private String[] dependsOn;
//autowire-candidate属性设置为false,这样容器在查找自动装配对象时候,将不考虑该bean,也就是他不会被考虑作为其他bean自动装配的候选者,但是该bean本身还是可以使自动装配来注入其他bean的
private boolean autowireCandidate = true;
//自动装配时当出现多个bean候选者时,将作为首选,对应bean属性的primary
private boolean primary = false;
//用于记录Qualifier,对应子元素的qualifiers,当自动注入的时候有相同的类型的bean时候,可以用Qualifier来指定注入的bean
private final Map<String, AutowireCandidateQualifier> qualifiers =
new LinkedHashMap<String, AutowireCandidateQualifier>(0);
//允许访问非公开的构造器和方法,程序可以设置
private boolean nonPublicAccessAllowed = true;
//是否以一种宽松的模式解析构造函数,默认为true
/**
如果为false,则在如下情况
interface MyTest{}
class MyTestImpl implements MyTest{}
class Main{
Main(MyTest i){}
Main(MyTestImpl i){}
}
抛出异常,因为Spring无法准确定位那个构造器
*/
private boolean lenientConstructorResolution = true;
//记录构造函数注入属性 ,对应bean属性construct-arg
private ConstructorArgumentValues constructorArgumentValues;
//普通属性集合
private MutablePropertyValues propertyValues;
//方法重写的持有者,记录lookup-method,replace-method元素
private MethodOverrides methodOverrides = new MethodOverrides();
/* 对应bean属性factory-bean
* 用法
*<bean id=''instanceFactoryBean" class="com.MyTestBean">
*<bean id=''currentTime" factory-bean="instanceFactoryBean" factory-method="createTime" >
*/
private String factoryBeanName;
//对应bean属性factory-method
private String factoryMethodName;
//初始化方法,对应bean属性init-method
private String initMethodName;
//销毁方法。对应bean属性destroy-method
private String destroyMethodName;
//是否执行init-method,程序设置
private boolean enforceInitMethod = true;
//是否执行destroy-method,程序设置
private boolean enforceDestroyMethod = true;
//是否是用户定义的而不是应用程序本身定义,创建AOP时候为true,程序设置
private boolean synthetic = false;
//定义这个bean的应用,APPLICATION:用户,INFARSTRUCTURE;
private int role = BeanDefinition.ROLE_APPLICATION;
//bean的描述信息
private String description;
//这个bean定义的资源
private Resource resource;