Spring 数据绑定使用场景
-
Spring BeanDefinition到Bean实例创建
-
Spring 数据绑定(DataBinder)
-
Spring Web参数绑定(WebDataBinder)
Spring 数据绑定组件
-
标准组件
-
org.springframework.validation.DataBinder
-
-
Web组件
-
org.springframework.web.bind.WebDataBinder
-
org.springframework.web.bind.ServletRequestDataBinder
-
org.springframework.web.bind.support.WebRequestDataBinder
-
org.springframework.web.bind.support.WebExchangeDataBinder(since 5.0)
-
Databinder核心属性
属性 | 说明 |
---|---|
target | 关联目标Bean对象 |
objectName | 目标Bean名称 |
bindingResult | 属性绑定结果 |
typeConverter | 类型转换器 |
conversionService | 类型转换服务 |
messageCodeResolver | 检验错误文案Code处理器 |
validators | 管理的Bean Validator实例集合 |
DataBinder绑定方法
-
bind(PropertyValues)
: 将PropertyValues Key-Value内容映射到关联Bean中的属性上-
假设PropertyValues中包含
name=xianglj
的键值对时, 同时Bean对象User中存在name属性
, 当bind方法执行时, User对象中的name属性值将被绑定为xianglj
-
Spring数据绑定元数据
-
DataBinder元数据-PropertyValues
特征 | 说明 |
---|---|
数据来源 | BeanDefinition, 主要来源XML资源配置BeanDefinition |
数据结构 | 由一个或多个PropertyValue组成 |
成员结构 | PropertyValue包含属性名称,以及属性值 |
常见实现 | MultablePropertyValues |
Web扩展实现 | ServletConfigPropertyValues, ServletRequestParameterPropertyValues |
相关声明周期 | InstantiationAwareBeanPostProcessor#postProcessProperties |
Spring 数据绑定控制参数
-
DataBinder绑定特殊场景分析
-
当PropertyValues中包含名称x的PropertyValue, 目标对象不存在x属性,当bind方法执行时,会发生什么(
忽略无法识别的属性
)? -
当PropertyValues中包含名称x的PropertyValue, 目标对象B中存在x属性,当bind方法执行时,如何避免B属性x不被绑定?
-
当PropertyValues中包含名称x.y的PropertValue,目标对象B中存在x属性,当bind方法执行时,会发生什么(
能够赋值嵌套属性
)?
-
DataBinder绑定控制参数
参数名称 | 说明 |
---|---|
ignoreUnknownFields | 是否忽略未知字段,默认值: true |
ignoreInvalidFields | 是否忽略非法字段,默认值为false |
autoGrowNestedPaths | 是否自动增加嵌套路径, 默认值: true |
allowedFields | 绑定字段白名单 |
disallowedFields | 绑定字段黑名单 |
requiredFields | 必须绑定字段 |
Spring 底层Java Beans替换实现
-
Java Beans核心实现 – java.beans.BeanInfo
-
属性(property)
-
java.beans.PropertyEditor
-
-
方法(Method)
-
事件(Event)
-
表达式(Expression)
-
-
Spring替代实现- org.springframework.beans.BeanWrapper
-
属性(Property)
-
java.beans.PropertyEditor
-
-
嵌套属性路径(nested path)
-
BeanWrapper的使用场景
-
BeanWrapper
-
Spring底层JavaBeans基础设施的中心化接口
-
通常不会直接使用,简介用于BeanFactory和DataBinder
-
提供标准JavaBeans分析和操作,能够单独或批量存储Java Bean的属性
-
支持嵌套属性路径(nested path)
-
实现类
org.springframework.beans.BeanWrapperImpl
-
Java Beans
-
标准Java Beans是如何操作属性的
API 说明 java.beans.Introspector Java Beans 内省API java.beans.BeanInfo Java Beans原信息API java.beans.BeanDescriptor Java Bean 信息描述符 java.beans.PropertyDescriptor Java Bean 属性描述符 java.beans.MethodDescriptor Java Bean 方法描述符 java.beans.EventSetDescriptor Java Bean 事件集合描述符 -
DataBinder 与 BeanWrapper
-
bind方法生成BeanPropertyBindingResult
-
-
-