- 前言
- 第一部分 核心实现
- 第 1 章 Spring 整体架构和环境搭建
- 第 2 章 容器的基本实现
- 第 3 章 默认标签的解析
- 第 4 章 自定义标签的解析
- 第 5 章 bean 的加载
- 第 6 章 容器的功能扩展
- 第 7 章 AOP
- 第二部分 企业应用
- 第 8 章 数据库连接 JDBC
- 第 9 章 整合 MyBatis
- 第 10 章 事务
- 第 11 章 SpringMVC
- 第 12 章 远程服务
- 第 13 章 Spring 消息
3.1.2 AbstractBeanDefinition 属性
至此我们便完成了对 XML 文档到 GenericBeanDefinition 的转换,也就是说到这里,XML 中所有的配置都可以在 GenericBeanDefinition 的实例类中找到对应的配置。
GenericBeanDefinition 只是子类实现,而大部分的通用属性都保存在了 AbstractBeanDefinition 中,那么我们再次通过 AbstractBeanDefinition 的属性来回顾一下我们都解析了哪些对应的配置。
public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccessor
implements BeanDefinition, Cloneable {
//此处省略静态变量以及 final 常量
/**
* bean 的作用范围,对应 bean 属性 scope
*/
private String scope = SCOPE_DEFAULT;
/**
* 是否是单例,来自 bean 属性 scope
*/
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
*/
private int autowireMode = AUTOWIRE_NO;
/**
*依赖检查,Spring 3.0 后弃用这个属性
*/
private int dependencyCheck = DEPENDENCY_CHECK_NONE;
/**
* 用来表示一个 bean 的实例化依靠另一个 bean 先实例化,对应 bean 属性 depend-on
*/
private String[] dependsOn;
/**
* autowire-candidate 属性设置为 false,这样容器在查找自动装配对象时,
* 将不考虑该 bean,即它不会被考虑作为其他 bean 自动装配的候选者,但是该 bean 本身还是可以使用自动
装配来注入其他 bean 的。
* 对应 bean 属性 autowire-candidate
*/
private boolean autowireCandidate = true;
/**
* 自动装配时当出现多个 bean 候选者时,将作为首选者,对应 bean 属性 primary
*/
private boolean primary = false;
/**
* 用于记录 Qualifier,对应子元素 qualifier
*/
private final Map<String, AutowireCandidateQualifier> qualifiers =
new LinkedHashMap<String, AutowireCandidateQualifier>(0);
/**
* 允许访问非公开的构造器和方法,程序设置
*/
private boolean nonPublicAccessAllowed = true;
/**
* 是否以一种宽松的模式解析构造函数,默认为 true,
* 如果为 false,则在如下情况
* interface ITest{}
* class ITestImpl implements ITest{};
* class Main{
* Main(ITest i){}
* Main(ITestImpl i){}
* }
* 抛出异常,因为 Spring 无法准确定位哪个构造函数
* 程序设置
*/
private boolean lenientConstructorResolution = true;
/**
* 记录构造函数注入属性,对应 bean 属性 constructor-arg
*/
private ConstructorArgumentValues constructorArgumentValues;
/**
* 普通属性集合
*/
private MutablePropertyValues propertyValues;
/**
* 方法重写的持有者 ,记录 lookup-method、replaced-method 元素
*/
private MethodOverrides methodOverrides = new MethodOverrides();
/**
* 对应 bean 属性 factory-bean,用法:
* <bean id="instanceFactoryBean" class="example.chapter3.InstanceFactoryBean"/>
* <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 属性 destory-method
*/
private String destroyMethodName;
/**
* 是否执行 init-method,程序设置
*/
private boolean enforceInitMethod = true;
/**
* 是否执行 destory-method,程序设置
*/
private boolean enforceDestroyMethod = true;
/**
* 是否是用户定义的而不是应用程序本身定义的,创建 AOP 时候为 true,程序设置
*/
private boolean synthetic = false;
/**
* 定义这个 bean 的应用 ,APPLICATION:用户,INFRASTRUCTURE:完全内部使用,与用户无关,SUPPORT:
某些复杂配置的一部分
* 程序设置
*/
private int role = BeanDefinition.ROLE_APPLICATION;
/**
* bean 的描述信息
*/
private String description;
/**
* 这个 bean 定义的资源
*/
private Resource resource;
//此处省略 set/get 方法
}
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论