Spring 配置元信息
Bean配置元信息:BeanDefinition
Bean属性元信息:PropertyValues
容器配置元信息
外部化配置元信息: PropertySource
Profile 元信息: @Profile
Spring Bean 配置元信息
GenericBeanDefinition
RootBeanDefinition
AnnotatedBeanDefinition
Spring 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