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
-
-
-