美文网首页
数据绑定三

数据绑定三

作者: 程序员札记 | 来源:发表于2023-07-19 12:06 被阅读0次

验证请求参数跟类方法匹配

我把Dog类方法的一些属性名改了:

image.png

继续按方法的名字去掉前缀发送:


image.png

结果可以:


image.png

那我把方法名字改下,后面都加1

image.png

结果这两个参数没绑定:


image.png

结论

参数绑定跟方法的匹配,而且需要有set方法。比如setBirth,参数名字可以是Birth或者birth
CachedIntrospectionResults构造方法里会进行设置。

image.png

判断可不可写的时候会获取:


image.png

获取到之后会进行封装,封装成BeanPropertyHandler

image.png

是否可读可写就是看有没有读方法和写方法:


image.png image.png

所以说这里属性是否可被绑定是跟属性set方法名字相关的,有兴趣的朋友可以调试下,里面还是比较深的。

绑定

参数名字修改完后就是这个样子,已经没有d.前缀了,其他的一些检查我就不说了,自己可以去看,我们接下去看怎么绑定到对象上的:

image.png

applyPropertyValues

image.png

就是遍历参数,然后设置:


image.png

最后到AbstractNestablePropertyAccessorprocessLocalProperty方法:
获取值,然后转换,最后赋值。

private void processLocalProperty(PropertyTokenHolder tokens, PropertyValue pv) {
        PropertyHandler ph = getLocalPropertyHandler(tokens.actualName);
        ...
        Object oldValue = null;
        try {
            Object originalValue = pv.getValue();//获取参数值
            Object valueToApply = originalValue;
            if (!Boolean.FALSE.equals(pv.conversionNecessary)) {
                if (pv.isConverted()) {
                    valueToApply = pv.getConvertedValue();
                }
                else {
                    if (isExtractOldValueForEditor() && ph.isReadable()) {
                        ...
                            oldValue = ph.getValue();
                        ...
                    //进行类型转换
                    valueToApply = convertForProperty(
                            tokens.canonicalName, oldValue, originalValue, ph.toTypeDescriptor());
                }
                pv.getOriginalPropertyValue().conversionNecessary = (valueToApply != originalValue);
            }
            ph.setValue(valueToApply);//设置值
        }

最终还是调用反射set方法,传入参数:

image.png

看调用栈:


image.png

其实里面涉及了很多东西,太深入讲不完,又枯燥,现在知道是怎么绑定的就好了,简单的说就是按照set方法名字进行请求参数的匹配,然后反射调用set方法传入参数来设置属性

相关文章

  • Vue之表单双向数据绑定和组件

    三、表单双向数据绑定和组件 目录:双向数据绑定、组件 1.双向数据绑定 1)什么是双向数据绑定Vue.js是一个M...

  • 前端三大框架:数据绑定与数据流

    目录序言单向数据绑定 vs 双向数据绑定单向数据流 vs 双向数据流数据流与数据绑定参考1. 序言在前端三大主流的...

  • 小程序基础

    内容: 一:数据绑定 1.1 动态内容绑定:页面的.js文件中 数据绑定 1.2动态属性绑定 1.3三元表达式 1...

  • 如何实现VM框架中的数据绑定

    作者:佳杰 本文原创,转载请注明作者及出处 如何实现VM框架中的数据绑定 一:数据绑定概述 二:数据绑定目的 三:...

  • AngularJs数据绑定

    数据的绑定:单项数据绑定和双向数据绑定 1、单项数据绑定(模型到视图) 运行结果: 其中绑定数据有两种方式:“{{...

  • 六、ASP.NET之数据绑定控件(一)

    数据绑定控件 简单数据绑定 1、数据绑定的实现方式分为: (1)简单绑定 (a)表达式绑定 (b)方法绑定 (2...

  • Data Bindings 数据绑定

    数据绑定 分为两种:1.控件间绑定 2.后台数据绑定 一、控件间绑定 二、后台数据绑定

  • angualr(三) 数据绑定

    angular 默认数据改为单向绑定 数据绑定 插值表达式 使用方括号将HTML标签的一个熟悉绑定到一个表达式 使...

  • WPF 数据绑定(三)

    实现绑定一个对象的集合。在界面添加ListBox控件,指定显示对象的属性值。 在后台代码,获取数据集合源,绑定到L...

  • 第十三章 数据绑定

    数据绑定介绍 Spring MVC是怎样完成的数据绑定 在数据绑定过程中,Spring MVC框架会通过数据绑定组...

网友评论

      本文标题:数据绑定三

      本文链接:https://www.haomeiwen.com/subject/pnwoudtx.html