Spring 配置元信息
  Bean配置元信息:BeanDefinition
  Bean属性元信息:PropertyValues
  容器配置元信息
  外部化配置元信息: PropertySource
  Profile 元信息: @Profile
Spring Bean 配置元信息
GenericBeanDefinition
RootBeanDefinition
AnnotatedBeanDefinitionSpring Bean 属性元信息
 PropertyValues
  MutablePropertyValues
  PropertyValue
Bean 属性上下文存储
  AttributeAccessor
Bean 元信息元素
   BeanMetadataElement
Spring 容器配置元信息
beans 元素
| 1 | 
 | 
| Beans元素属性 | 默认值 | 使用场景 | 
|---|---|---|
| profile | null(留空) | SpringProfiles 配置值 | 
| 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 | 默认SpringBean名称的pattern | 
| default-init-method | null | 默认springBeans 自定义初始化方法 | 
| default-destroy-method | null | 默认SpringBean自定义的销毁方法 | 
Spring Xml 配置元信息
| xml元素 | 使用场景 | 
|---|---|
| <context:annotation-config/> | 激活Spring注解驱动 | 
| <context:component-scan/> | Spring @Component 以及自定义注解扫描 | 
| <context:load-time-weaver /> | 激活Spring LoadTimeWeaver | 
| <context:mbean-export /> | 暴露Springbeans 做为JMX beans | 
| <context:mbean-server /> | 将当前平台作为MBeanServer | 
| <context:property-placeholder /> | 加载外部化配置资源作为Spring属性配置 | 
| <context:property-override /> | 利用外部化配置资源覆盖Spring属性值 | 
底层实现  BeanDefinitionParserDelegate  
基于XML文件装载
Spring Bean 配置元信息
| xml元素 | 使用场景 | 
|---|---|
| <beans:beans /> | 单XML资源下的多个SpringBean配置 | 
| <beans:bean /> | 单个SpringBean定义Beandefinition 配置 | 
| <beans:alias /> | 为SpringBean 定义(BeanDefinition)映射别名 | 
| <beans:import /> | 加载外部SpringXML 配置资源 | 
底层实现  XmlBeanDefinitionReader  和  BeanDefinitionDocumentReader 和   BeanDefinitionHolder
基于Properties文件装载
Spring Bean 配置元信息
| Properties 属性名 | 使用场景 | 
|---|---|
| (class) | Bean类全称限定名 | 
| (abstract) | 是否为抽象的BeanDefinition | 
| (parent) | 指定 parent BeanDefinition | 
| (lazy-init) | 是否延迟初始化 | 
| (ref) | 引用其他Bean的名称 | 
| (scope) | 设置Bean的scope属性 | 
| ${n} | n标示第n个构造器参数 | 
| 底层实现 PropertiesBeanDefinitionReader | 
基于Java注解装载SpringBean的配置元信息
| Spring注解 | 场景说明 | 
|---|---|
| @Repository | 数据仓储模式 | 
| @Component | 通用组建模式 | 
| @Service | 服务模式 | 
| @Controller | Web控制器模式 | 
| @Configuration | 配置类模式 | 
| @Autowired | Bean依赖注入,支持多种依赖查找方式 | 
| @Qualifier | 细粒度的@Autowired 依赖查找 | 
| @Resource | Java注解,类似于@Autowired | 
| @Inject | Java注解,类似于@Autowired | 
| @Profile | 配置话条件装配 | 
| @Conditional | 编程条件装配 | 
| @PostConstructor | 替换XML元素 <bean init-method=” /> 或者 initializingBean | 
| @PreDestroy | 替换XML元素 | 
ClassPathScanningCandidateComponentProvider
AutowiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
SpringBean配置元信息底层实现
- Xml资源 BeanDefinition解析与注册 - 核心API: XmlBeanDefinitionReader- 资源: Resource
- 底层: BeanDefinitionDocumentReader- XML 解析: JavaDOM Level 3 API
- BeanDefinition 解析 BeanDefinitionParserDelegate
- BeanDefinition 注册 BeanDefinitionRegistry
 DefaultBeanDefinitionDocumentReader
 
 
 
- 核心API: XmlBeanDefinitionReader
- Properties 资源 BeanDefinition 解析与注册 - 核心API:PropertiesBeanDefinitionReader- 资源- 字节流:Resource
- 字符流:EncodeResource
 
- 底层:- 存储:java.util.Properties
- BeanDefinition 解析: API内部实现
- BeanDefinition 注册: BeanDefinitionRegistry
 
 
- 资源
 
- 核心API:PropertiesBeanDefinitionReader
- Annotation 解析与注册 - 核心API:AnnotatedBeanDefinitionReader- 资源- 类对象: java.lang.Class
 
- 底层- 条件评估: ConditionEvaluator
- Bean范围解析: ScopeMetadataResolver
- BeanDefinition解析:内部API实现
- BeanDefinition处理:AnnotationConfigUtils.processCommonDefinitionAnnotations
- BeanDefinition注册:BeanDefinitionRegistry
 
 
- 资源
 
- 核心API:AnnotatedBeanDefinitionReader
基于XML文件装载SpringIOC容器配置元信息
| 命名空间 | 所属模块 | 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-util | https://www.springframework.org/schema/util/spring-util.xsd | 
| tool | spring-tool | https://www.springframework.org/schema/tool/spring-tool.xsd | 
基于Java注解装载SpringIOC容器配置元信息
| Spring注解 | 场景说明 | Since | 
|---|---|---|
| @ImportResource | 替换XML元素 </import> | 3.0 | 
| @Import | 导入Configuration Class | 3.0 | 
| @ComponentScan | 扫描指定package下标注Spring模式注解的类 | 3.1 | 
| @PropertySource | 配置属性抽象 | 3.1 | 
| @PropertySources | @PropertySource集合注解 | 4.0 | 
基于ExtensibleXML authoring扩展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
 
- AbstractXmlApplicationContext.loadBeanDefinitions
 
- AbstractRefreshableApplicationContext.refreshBeanFactory
BewanDefinitionParserDelegate.parseCustomElement(Element, BeanDefinition);
- 获取namespace
- 通过namespace 解析NamespaceHandler
- 构造ParserContext
- 解析元素,获取BeanDefinition
基于Properties文件装载外部化配置
基于YAML文件装载外部化配置
- org.springfrmework.beans.factory.config.YamlProcessor- org.springframework.beans.factory.config.YamlMapFactoryBean
- org.springframework.beans.factory.config.YamlPropertiesFactoryBean
 
