beans 包主要提供了接口和类用于处理java beans。 
    其中最主要的接口是BeanWrapper: 
    Spring 的中心接口,用于访问javabeans 的低层操作。默认实现为BeanWrapperImpl 提供分析和处理标准java beans 用于get 和set 属性,取得属性描述,查询属性的读/写能力。 
    用法非常简单 
    TestBean tb = new TestBean(); 
    BeanWrapper bw = new BeanWrapperImpl(tb); 
    bw.isReadableProperty("age");//判断age属性是否可读 
    bw.setPropertyValue("name", "tom"); //设置name属性的值为tom 
    bw.getPropertyValue("int2")//取得属性 
    //当然,最强大的是能嵌套设置属性,如: 
    //tb中有个spouse的属性,也为TestBean,这样 
    bw.setPropertyValue("spouse.name", "tom"); 
    //等价于tb.getSpouse().setName("tom"); 
    //bw 同样支持数组和集合,map属性设置 
    bw.getPropertyValue("array[0].name"); 
    bw.getPropertyValue("map[key4][0].name"); 
    
    beans包 还提供了一个PropertyValues用于保存多个属性值,默认的实现MutablePropertyValues 
    MutablePropertyValues pvs = new MutablePropertyValues(); 
    pvs.addPropertyValue("array[0].name", "name5"); 
    pvs.addPropertyValue("array[1].name", "name4"); 
    bw.setPropertyValues(pvs); 
    
    BeanWrapper的层次结构,也比较简单继承于ConfigurablePropertyAccessor ,而ConfigurablePropertyAccessor 又继承于PropertyAccessor 和   PropertyEditorRegistry 接口。 
   有一点不太明白,为什么ConfigurablePropertyAccessor 要继承于PropertyEditorRegistry 
    PropertyEditorRegistry 的主要作用是提供方法用于注册JavaBeans PropertyEditors。默认的实现为PropertyEditorRegistrySupport 
   这就使得BeanWrapperImpl 也需要继承PropertyEditorRegistrySupport,从字面意义上来说,两个类不是很有关系,其实最主要用到的方法,也就是registerDefaultEditors(),注册spring中所有的属性编辑类。 
   beans 包中还有两个接口TypeConverter和Mergeable 。TypeConverter由BeanWrapperImpl实现,主要用于转换属性值。其主要的工作由TypeConverterDelegate 这个包内类完成的。Mergeable 主要是用来合并值得,不过具体的实现,在org.springframework.beans.factory.support 包中。 
   beans 包中提供了两个有用的工具类,BeanUtils和PropertyAccessorUtils。

https://blog.csdn.net/pentiumchen/article/details/44066173

spring BeanWrapperImpl方便的嵌套属性(list)操作的更多相关文章

  1. Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作

    详细的Spring MVC框架搭配在这个连接中: Maven 工程下 Spring MVC 站点配置 (一) Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 这篇主 ...

  2. Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别

    转: http://blog.csdn.net/it_man/article/details/5074371 Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之 ...

  3. Spring boot配置多个Redis数据源操作实例

    原文:https://www.jianshu.com/p/c79b65b253fa Spring boot配置多个Redis数据源操作实例 在SpringBoot是项目中整合了两个Redis的操作实例 ...

  4. Spring Data Redis入门示例:Hash操作(七)

    将对象存为Redis中的hash类型,可以有两种方式,将每个对象实例作为一个hash进行存储,则实例的每个属性作为hash的field:同种类型的对象实例存储为一个hash,每个实例分配一个field ...

  5. spring中bean的作用域属性singleton与prototype的区别

    1.singleton 当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会 ...

  6. runtime-对成员变量和属性的操作

    成员变量 首先我们来看看成员变量在runtime中是什么样的 在runtime中成员变量是一个objc_ivar类型的结构体,结构体定义如下 struct objc_ivar { char *ivar ...

  7. JavaScript对象属性赋值操作的逻辑

    对象进行属性赋值操作时,其执行逻辑如下所示: 1. 当前对象中是否有该属性?有,进行赋值操作:没有,进行下一步判断. 2. 对象的原型链中是否有该属性?没有,在当前对象上创建该属性,并赋值:有,进行下 ...

  8. 什么是Spring的命名空间及使用Spring 的命名空间p 装配属性

    这个就要从XML说了,Spring的配置管理可以利用XML方式进行配置,而XML里面就有命名空间这个概念..实际上就和标签的意思有点像 你给一个命名空间以后,这个XML文件里面就可以用那个命名空间上下 ...

  9. Spring 配置中的 default-lazy-init属性

    spring的容器是提供了lazy-load的,即默认的缺省设置是bean没有lazy-load,该属性处于false状态,这样导致spring在启动过程导致在启动时候,会默认加载整个对象实例图,从初 ...

随机推荐

  1. springCloud面试题

    1.SpringCloud和Dubbo SpringCloud和Dubbo都是现在主流的微服务架构SpringCloud是Apache旗下的Spring体系下的微服务解决方案Dubbo是阿里系的分布式 ...

  2. ORA-12541:TNS:无监听程序

    1.OracleServiceORCL确认已经在服务中启动 2.OracleOraDb11g_home1TNSListener确认已经在服务中启动 3.服务端listener.ora和tnsnames ...

  3. Win10系统下,本地连接远程桌面(Win2016)图解

    1.Win+R在运行框中输入mstsc,回车 2.在出现的远程登陆窗口中,计算机中输入远程桌面IP 3.点击显示选项按钮,在远程桌面窗口中,点击常规(默认),输入登陆的用户名: XXXXXX 4.点击 ...

  4. Node.js 薄荷网爬取

    Node.js:是一个基于前端的服务器,主要的特点:单线程,异步I/O(对这个没有了解,开发起来真的会踩很多坑),事件驱动 前言:本人主要是一个以使用.Net平台下的语言,进行开发的一个菜鸡,之前面试 ...

  5. 我们一起踩过的坑----react(antd)(二)

    1.antd Upload默认值问题 需求是这样的,后台若没有图片默认值,则只有上传按钮,且只能上传一张图片:若有默认值,则显示默认头像图片, 可删除,删除之后有且只能添加一张图片,没有删除默认图片时 ...

  6. Polar Code(1)关于Polar Code

    Polar Codes于2008年由土耳其毕尔肯大学Erdal Arikan教授首次提出,Polar Codes提出后各通信巨头都进行了研究.2016年11月18日(美国时间2016年11月17日), ...

  7. Laravel 5 速查表

    Artisan // 在版本 5.1.11 新添加,见 http://d.laravel-china.org/docs/5.1/authorization#creating-policiesphp a ...

  8. 生成式对抗网络(GAN)实战——书法字体生成练习赛

    https://www.tinymind.cn/competitions/ai 生成式对抗网络(GAN)是近年来大热的深度学习模型. 目前GAN最常使用的场景就是图像生成,作为一种优秀的生成式模型,G ...

  9. Linux console 重定向

    Linux从启动到启动完成的所有输出均复制到Com口上,一共需要修改3个文件.在此之前还要确认/sbin/agetty文件是否存在,此文件用来把系统的输入输出映射到其它设备上. 1.首先在 /etc/ ...

  10. [leetcode]432. All O`one Data Structure全O(1)数据结构

    Implement a data structure supporting the following operations: Inc(Key) - Inserts a new key with va ...