title: Spring 数据绑定
date: 2022-12-22 19:26:57
categories:
- Java
- 框架
- Spring
- Spring核心
tags:
- Java
- 框架
- Spring
- 数据绑定
permalink: /pages/267b4c/
Spring 数据绑定(Data Binding)的作用是将用户的输入动态绑定到 JavaBean。换句话说,Spring 数据绑定机制是将属性值设置到目标对象中。
在 Spring 中,数据绑定功能主要由 DataBinder
类实现。此外,BeanWrapper
也具有类似的功能,但 DataBinder
额外支持字段验证、字段格式化和绑定结果分析。
定义一个用于测试的 JavaBean
public class TestBean {
private int num;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public String toString() {
return "TestBean{" + "num=" + num + '}';
}
}
数据绑定示例
public class DataBindingDemo {
public static void main(String[] args) {
MutablePropertyValues mpv = new MutablePropertyValues();
mpv.add("num", "10");
TestBean testBean = new TestBean();
DataBinder db = new DataBinder(testBean);
db.bind(mpv);
System.out.println(testBean);
}
}
BeanDefinition
到 Bean 实例创建DataBinder
)WebDataBinder
)在 Spring 中,DataBinder
类是数据绑定功能的基类。WebDataBinder
是 DataBinder
的子类,主要用于 Spring Web 数据绑定,此外,还有一些 WebDataBinder
的扩展子类,其类族如下图所示:
DataBinder 核心属性:
属性 | 说明 |
---|---|
target |
关联目标 Bean |
objectName |
目标 Bean 名称 |
bindingResult |
属性绑定结果 |
typeConverter |
类型转换器 |
conversionService |
类型转换服务 |
messageCodesResolver |
校验错误文案 Code 处理器 |
validators |
关联的 Bean Validator 实例集合 |
DataBinder
类的核心方法是 bind(PropertyValues)
:将 PropertyValues Key-Value 内容映射到关联 Bean(target)中的属性上
DataBinder 元数据 - PropertyValues
特征 | 说明 |
---|---|
数据来源 | BeanDefinition,主要来源 XML 资源配置 BeanDefinition |
数据结构 | 由一个或多个 PropertyValue 组成 |
成员结构 | PropertyValue 包含属性名称,以及属性值(包括原始值、类型转换后的值) |
常见实现 | MutablePropertyValues |
Web 扩展实现 | ServletConfigPropertyValues、ServletRequestParameterPropertyValues |
相关生命周期 | InstantiationAwareBeanPostProcessor#postProcessProperties |
DataBinder 绑定特殊场景分析
参数名称 | 说明 |
---|---|
ignoreUnknownFields | 是否忽略未知字段,默认值:true |
ignoreInvalidFields | 是否忽略非法字段,默认值:false |
autoGrowNestedPaths | 是否自动增加嵌套路径,默认值:true |
allowedFields | 绑定字段白名单 |
disallowedFields | 绑定字段黑名单 |
requiredFields | 必须绑定字段 |
JavaBeans 核心实现 - java.beans.BeanInfo
java.beans.PropertyEditor
Spring 替代实现 - org.springframework.beans.BeanWrapper
java.beans.PropertyEditor
DataBinder 与 BeanWrapper
标准 JavaBeans 是如何操作属性的?
API | 说明 |
---|---|
java.beans.Introspector | Java Beans 内省 API |
java.beans.BeanInfo | Java Bean 元信息 API |
java.beans.BeanDescriptor | Java Bean 信息描述符 |
java.beans.PropertyDescriptor | Java Bean 属性描述符 |
java.beans.MethodDescriptor | Java Bean 方法描述符 |
java.beans.EventSetDescriptor | Java Bean 事件集合描述符 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。