Spring(九) ConfigurationMetadata配置元信息
Spring配置元信息
- Spring Bean 配置元信息 -
BeanDefinition
- Spring Bean 属性元信息 -
PropertyValues
- Spring 容器配置元信息
- Spring 外部化配置元信息 -
PropertySource
- Spring Profile 元信息 -
@Profile
Spring Bean 配置元信息
GenericBeanDefinition
:通用型 BeanDefinitionRootBeanDefinition
:无 Parent 的 BeanDefinition 或者合并后 BeanDefinitionAnnotatedBeanDefinition
:注解标注的 BeanDefinition
Spring Bean 属性元信息
- 可修改实现 -
MutablePropertyValues
- 元素成员 -
PropertyValue
- Bean 属性上下文存储 -
AttributeAccessor
- Bean 元信息元素 -
BeanMetadataElement
Spring 容器配置元信息
-
Spring 容器配置元信息
beans 元素属性 默认值 使用场景 profile null( 留空) Spring Profiles 配置值 default-lazy-init default 当 outter beans “default-lazy-init” 属性存 在时,继承该值,否则为“false” default-merge default 当 outter beans “default-merge” 属性存在 时,继承该值,否则为“false” default-autowire default 当 outter beans “default-autowire” 属性 存在时,继承该值,否则为“no” default-autowire-candidates null( 留空) 默认 Spring Beans 名称 pattern default-init-method null( 留空) 默认 Spring Beans 自定义初始化方法 default-destroy-method null( 留空) 默认 Spring Beans 自定义销毁方法 -
Spring XML 配置元信息 - 应用上下文相关
XML 元素 使用场景 <context:annotation-config /> 激活 Spring 注解驱动 <context:component-scan /> Spring @Component 以及自定义注解扫描 <context:load-time-weaver /> 激活 Spring LoadTimeWeaver <context:mbean-export /> 暴露 Spring Beans 作为 JMX Beans <context:mbean-server /> 将当前平台作为 MBeanServer <context:property-placeholder /> 加载外部化配置资源作为 Spring 属性配置 <context:property-override /> 利用外部化配置资源覆盖 Spring 属性值
基于 XML 资源装载 Spring Bean 配置元信息
XML 元素 | 使用场景 |
---|---|
<beans:beans /> | 单 XML 资源下的多个 Spring Beans 配置 |
<beans:bean /> | 单个 Spring Bean 定义(BeanDefinition)配置 |
<beans:alias /> | 为 Spring Bean 定义(BeanDefinition)映射别名 |
<beans:import /> | 加载外部 Spring XML 配置资源 |
基于 Properties 资源装载 Spring Bean 配置元信息
Properties 属性名 | 使用场景 |
---|---|
(class) | Bean 类全称限定名 |
(abstract) | 是否为抽象的 BeanDefinition |
(parent) | 指定 parent BeanDefinition 名称 |
(lazy-init) | 是否为延迟初始化 |
(ref) | 引用其他 Bean 的名称 |
(scope) | 设置 Bean 的 scope 属性 |
${n} | n 表示第 n+1 个构造器参数 |
基于 Java 注解装载 Spring Bean 配置元信息
-
Spring模式注解
Spring 注解 场景说明 起始版本 @Repository 数据仓储模式注解 2.0 @Component 通用组件模式注解 2.5 @Service 服务模式注解 2.5 @Controller Web 控制器模式注解 2.5 @Configuration 配置类模式注解 3.0 -
Spring Bean 定义注解 .
Spring 注解 场景说明 起始版本 @Bean 替换 XML 元素 <bean> 3.0 @DependsOn 替代 XML 属性<bean depends-on=“…”/> 3.0 @Lazy 替代 XML 属性 <bean lazy-init=“true|falses” /> 3.0 @Primary 替换 XML 元素 <bean primary=“true|false” /> 3.0 @Role 替换 XML 元素<bean role=“…” /> 3.1 @Lookup 替代 XML 属性 <bean lookup-method=“…”> 4.1 -
Spring Bean 依赖注入注解
Spring 注解 场景说明 起始版本 @Autowired Bean 依赖注入,支持多种依赖查找方式 2.5 @Qualifier 细粒度的 @Autowired 依赖查找 2.5 Java 注解 场景说明 起始版本 @Resource 类似于 @Autowired 2.5 @Inject 类似于 @Autowired 2.5 -
Spring Bean 条件装配注解
Spring 注解 场景说明 起始版本 @Profile 配置化条件装配 3.1 @Conditional 编程条件装配 4.0 -
Spring Bean 生命周期回调注解
Spring 注解 场景说明 起始版本 @PostConstruct 替换 XML 元素 <bean init-method=“…” /> 或 InitializingBean 2.5 @PreDestroy 替换 XML 元素 <bean destroy-method=“…” /> 或 DisposableBean 2.5
Spring Bean 配置元信息底层实现
-
Spring BeanDefinition 解析与注册
实现场景 实现类 起始版本 XML 资源 XmlBeanDefinitionReader 1.0 Properties 资源 PropertiesBeanDefinitionReader 1.0 Java 注解 AnnotatedBeanDefinitionReader 3.0 -
Spring XML 资源 BeanDefinition 解析与注册
- 核心 API - XmlBeanDefinitionReader
- 资源 - Resource
- 底层 - BeanDefinitionDocumentReader
- XML 解析 - Java DOM Level 3 API
- BeanDefinition 解析 - BeanDefinitionParserDelegate
- BeanDefinition 注册 - BeanDefinitionRegistry
- 核心 API - XmlBeanDefinitionReader
-
Spring Properties 资源 BeanDefinition 解析与注册
- 核心 API - PropertiesBeanDefinitionReader
- 资源
- 字节流 - Resource
- 字符流 - EncodedResouce
- 底层
- 存储 - java.util.Properties
- BeanDefinition 解析 - API 内部实现
- BeanDefinition 注册 - BeanDefinitionRegistry
- 资源
- 核心 API - PropertiesBeanDefinitionReader
-
Spring Java 注册 BeanDefinition 解析与注册
- 核心 API - AnnotatedBeanDefinitionReader
- 资源
- 类对象 - java.lang.Class
- 底层
- 条件评估 - ConditionEvaluator
- Bean 范围解析 - ScopeMetadataResolver
- BeanDefinition 解析 - 内部 API 实现
- BeanDefinition 处理 -
- AnnotationConfigUtils.processCommonDefinitionAnnotations
- BeanDefinition 注册 - BeanDefinitionRegistry
- 资源
- 核心 API - AnnotatedBeanDefinitionReader
基于 XML 资源装载 Spring IoC 容器配置元信息
-
Spring IoC 容器相关 XML 配置
命名空间 所属模块 Schema 资源 URL beans spring-beans https://www.springframework.org/schema/beans/spring-beans.xsd context spring-context https://www.springframework.org/schema/context/spring-context.xsd aop spring-aop https://www.springframework.org/schema/aop/spring-aop.xsd tx spring-tx https://www.springframework.org/schema/tx/spring-tx.xsd util spring-beans https://www.springframework.org/schema/util/spring-util.xsd tool spring-beans https://www.springframework.org/schema/tool/spring-tool.xsd
基于 Java 注解装载 Spring IoC 容器配置元信息
-
基于 Java 注解装载 Spring IoC 容器配置元信息
Spring 注解 场景说明 起始版本 @ImportResource 替换 XML 元素 3.0 @Import 导入 Configuration Class 3.0 @ComponentScan 扫描指定 package 下标注 Spring 模式注解的类 3.1 -
Spring IoC 配属属性注解
Spring 注解 场景说明 起始版本 @PropertySource 配置属性抽象 PropertySource 注解 3.1 @PropertySources @PropertySource 集合注解 4.0
基于 Extensible XML authoring 扩展 Spring XML 元素
- Spring XML 扩展
- 编写 XML Schema 文件:定义 XML 结构
- 自定义 NamespaceHandler 实现:命名空间绑定
- 自定义 BeanDefinitionParser 实现:XML 元素与 BeanDefinition 解析
- 注册 XML 扩展:命名空间与 XML Schema 映射
Extensible XML authoring 扩展原理
- 触发时机
- AbstractApplicationContext#obtainFreshBeanFactory
- AbstractRefreshableApplicationContext#refreshBeanFactory
- AbstractXmlApplicationContext#loadBeanDefinitions
* …- XmlBeanDefinitionReader#doLoadBeanDefinitions
- …
- BeanDefinitionParserDelegate#parseCustomElement
- XmlBeanDefinitionReader#doLoadBeanDefinitions
- AbstractApplicationContext#obtainFreshBeanFactory
- 核心流程
- BeanDefinitionParserDelegate#parseCustomElement(org.w3c.dom.Element, BeanDefinition)
- 获取 namespace
- 通过 namespace 解析 NamespaceHandler
- 构造 ParserContext
- 解析元素,获取 BeanDefinition
- BeanDefinitionParserDelegate#parseCustomElement(org.w3c.dom.Element, BeanDefinition)
- 注解驱动
@org.springframework.context.annotation.PropertySource
@org.springframework.context.annotation.PropertySources
- API 编程
org.springframework.core.env.PropertySource
org.springframework.core.env.PropertySources
org.springframework.beans.factory.config.YamlProcessor
org.springframework.beans.factory.config.YamlMapFactoryBean
org.springframework.beans.factory.config.YamlPropertiesFactoryBean
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HoleLin's Blog!