BeanDefinition 介绍
BeanDefinition是 Spring 中一种重要的数据模型定义,用来存储 Spring 的启动期间通过 xml 或者注解方式扫描的需要注入进 Spring的 IOC 容器内的 Bean 信息。
BeanDefinition 类依赖图
BeanDefinition 类信息
BeanDefinition
接口类,定义BeanDefinition结构的行为
AbstractBeanDefinition
抽象类,定义了BeanDefinition中使用的大部分成员变量
变量名 | 类型 | 默认值 | 说明 |
---|---|---|---|
beanClass | java.lang.Object | - | 所属的 Class 的类 |
scope | java.lang.String | - | 作用域范围 |
qualifiers | java.util.Map<String, AutowireCandidateQualifier> | ||
instanceSupplier | java.util.function.Supplier | ||
factoryBeanName | java.lang.String | ||
factoryMethodName | java.lang.String | ||
constructorArgumentValues.indexedArgumentValues | ConstructorArgumentValues.Map<Integer, ValueHolder> | ||
constructorArgumentValues.genericArgumentValues | List<org.springframework.beans.factory.config.ConstructorArgumentValues$ValueHolder> | ||
propertyValues.propertyValueList | List |
||
propertyValues.processedProperties | Set |
||
methodOverrides.overrides | Set |
||
initMethodName | String | ||
destroyMethodName | String | ||
description | String | ||
role | int | 默认为ROLE_APPLICATION | |
resource | org.springframework.core.io.Resource | ||
nonPublicAccessAllowed | boolean | 默认为 true | |
lenientConstructorResolution | boolean | 默认为 true | |
abstractFlag | boolean | 默认为 false | 抽象类标记 |
lazyInit | boolean | - | |
autowireMode | int | AUTOWIRE_NO | |
dependencyCheck | int | DEPENDENCY_CHECK_NONE | |
dependsOn | String[] | - | 依赖的集合 |
autowireCandidate | boolean | true | 自动装备候选 bean |
primary | boolean | false | 默认为非主要 bean |
enforceInitMethod | boolean | true | |
enforceDestroyMethod | boolean | true | |
synthetic | boolean | false |
设置默认配置。从BeanDefinitionDefaults中读取
- lazyInit 默认为 null
- autowireMode 默认为AUTOWIRE_NO
- dependencyCheck 默认为DEPENDENCY_CHECK_NONE
- initMethodName 默认为 null
- destroyMethodName 默认为 null
AnnotatedBeanDefinition
注解用接口
新增接口方法
- getMetadata
- getFactoryMethodMetadata
用于获取注解的元数据和方法的元数据
GenericBeanDefinition
AbstractBeanDefinition的主要实现类。
GenericBeanDefinition是标准bean定义的一站式服务。与任何bean定义一样,它允许指定一个类加上可选的构造函数参数值和属性值。此外,可以通过“parentName”属性灵活地配置来自父bean定义的派生。通常,使用这个GenericBeanDefinition类的目的是注册用户可见的bean定义(post-processor可以对其进行操作,甚至可能重新配置父名称)。使用RootBeanDefinition / ChildBeanDefinition来预先确定父/子关系。
新增parentName
属性
ScannedGenericBeanDefinition
AnnotatedGenericBeanDefinition
ConfigurationPropertiesValueObjectBeanDefinition
————————未完待续—————————–
各个实现类的应用场景是哪些?
TODO
AnnotationMetadata介绍
AnnotationMetadata是描述 Bean 上注解信息的数据结构,用来对 Bean 的注解元数据进行存储。主要的实现类有SimpleAnnotationMetadata
和StandardAnnotationMetadata
。
怎么
版权声明:本文由 followtry 在 2019年12月27日发表。本文采用CC BY-NC-SA 4.0许可协议,非商业转载请注明出处,不得用于商业目的。
文章题目及链接:《Spring学习 - 元数据存储结构 -- BeanDefinition 和 AnnotationMetadata 的机制》