目录
百战程序员,全站22050+开发课程+文档 ,学习精选优质好课快人一步!观看视频 快捷键ALT+N

JAVA全系列 教程

3762个小节阅读:7094.1k

收藏
全部开发者教程

C语言快速入门

JAVA全系列 教程

面向对象的程序设计语言

Python全系列 教程

Python3.x版本,未来主流的版本

人工智能 教程

顺势而为,AI创新未来

大厂算法 教程

算法,程序员自我提升必经之路

C++ 教程

一门通用计算机编程语言

微服务 教程

目前业界流行的框架组合

web前端全系列 教程

通向WEB技术世界的钥匙

大数据全系列 教程

站在云端操控万千数据

AIGC全能工具班

A

A A

White Night

阅读(384)
赞(0)

5.DataBinder源码分析BeanWrapper、Errors、BindingResult

BeanWrapper 是 基于装饰器设计模式实现的。实现了PropertyEditorRegistry接口和TypeConverter接口。

在DataBinder数据绑定时,Bean的属性绑定过程就是使用BeanWrapper实现的。

BeanWrapper只有一个实现类BeanWrapperImpl,这个类还是PropertyEditorSupport子类,所以具备类型转换的能力。

在使用DataBinder的convertIfNecessary()方法时,底层通过getTypeConverter()获取到类型转换器对象。

getTypeConverter()方法中类型转换器是通过getInternaleBindingResult()获取到的。

getInternaleBindingResult()方法返回结果类型为AbstractPropertyBindingResult,通过断电可以看出来实际返回结果子类BeanPropertyBindingResult。

createBeanPropertyBindingResult()方法

AbstractPropertyBindingResult是Errors接口和BindingResult接口的实现类。

Errors接口里面存储数据绑定和错误信息。也就是是说通过Errors可以获取到属性的信息并且给属性绑定一个错误信息。

Errors接口里面方法比较多

而BindingResult是Errors接口的子接口。也就是说里面也存储了错误信息和属性绑定信息。而BindingResult接口主要是为了和数据校验Validation一起使用的。所以下一章节我们就讲解一下Validation是什么。

我们继续看源码getTypeConverter()方法中获取到BindingResult后,调用getPropertyAccessor()

getPropertyAccessor()方法最终返回的是BeanWrapper,如果继续跟源码,可以知道createBeanWrapper()方法实际返回结果为BeanWrapperImpl。这也说明了DataBinder数据绑定时,类型转换器本质是BeanWrapper的实现类BeanWrapperImpl。使用了装饰者模式。

 

北京市昌平区回龙观镇南店村综合商业楼2楼226室

©2014-2023 百战卓越(北京)科技有限公司 All Rights Reserved.

京ICP备14032124号-2