Spring 配置元信息
配置元信息
- Spring Bean 配置元信息 - BeanDefinition
- Spring Bean 属性元信息 - PropertyValues
- Spring 容器配置元信息
- Spring 外部化配置元信息 - PropertySource
- Spring Profile 元信息 - @Profile
Spring Bean 配置元信息
Bean 配置元信息 - BeanDefinition
- GenericBeanDefinition:通用型 BeanDefinition
- RootBeanDefinition:无 Parent 的 BeanDefinition 或者合并后 BeanDefinition
- AnnotatedBeanDefinition:注解标注的 BeanDefinition
Spring Bean 属性元信息
Bean 属性元信息 - PropertyValues
- 可修改实现 - MutablePropertyValues
- 元素成员 - PropertyValue
- Bean 属性上下文存储 - AttributeAccessor
- Bean 元信息元素 - BeanMetadataElement
Spring Bean 配置元信息底层实现
Spring XML 资源 BeanDefinition 解析与注册
核心 API - XmlBeanDefinitionReader
- 资源 - Resource
- 底层 - BeanDefinitionDocumentReader
– XML 解析 - Java DOM Level 3 API
– BeanDefinition 解析 - BeanDefinitionParserDelegate
– BeanDefinition 注册 - BeanDefinitionRegistry
Spring Bean 配置元信息底层实现
Spring Properties 资源 BeanDefinition 解析与注册
- 核心 API - PropertiesBeanDefinitionReader
– 资源
– 字节流 - Resource
– 字符流 - EncodedResouce - 底层
– 存储 - java.util.Properties
– BeanDefinition 解析 - API 内部实现
– BeanDefinition 注册 - BeanDefinitionRegistry
Spring Bean 配置元信息底层实现
核心 API - AnnotatedBeanDefinitionReader
- 资源
– 类对象 - java.lang.Class - 底层
– 条件评估 - ConditionEvaluator
– Bean 范围解析 - ScopeMetadataResolver
– BeanDefinition 解析 - 内部 API 实现
– BeanDefinition 处理 -AnnotationConfigUtils.processCommonDefinitionAnnotations
– BeanDefinition 注册 - BeanDefinitionRegistry
基于 Extensible XML authoring 扩展 Spring XML 元素
Spring XML 扩展
- 编写 XML Schema 文件:定义 XML 结构
- 自定义 NamespaceHandler 实现:命名空间绑定
- 自定义 BeanDefinitionParser 实现:XML 元素与 BeanDefinition 解析
- 注册 XML 扩展:命名空间与 XML Schema 映射
Extensible XML authoring 扩展原理
BeanDefinitionParserDelegate#parseCustomElement(org.w3c.dom.Element, BeanDefinition)
- 获取 namespace
- 通过 namespace 解析 NamespaceHandler
- 构造 ParserContext
- 解析元素,获取 BeanDefinintion
基于 Properties 资源装载外部化配置
注解驱动
• @org.springframework.context.annotation.PropertySource
• @org.springframework.context.annotation.PropertySources
API 编程
• org.springframework.core.env.PropertySource
• org.springframework.core.env.PropertySources