Spring 源码系列-BeanWrapper
BeanWrapper 是 Spring 提供的一个用来操作javaBean 属性的工具,使用它可以直接修改一个对象的属性。
对于 bean 属性的操作,大家熟知的主要有下面这些工具类:
- 1.Apache 的 BeanUtils 和 PropertyUtils
- 2.cglib 的 BeanMap 和 BeanCopier
- 3.spring 的 BeanUtils
Spring 中 BeanWrapper 的主要功能在于:
- 1.支持设置嵌套属性
- 2.支持属性值的类型转换(设置ConversionService)
- 3.提供分析和操作标准JavaBean的操作:获取和设置属性值(单独或批量),获取属性描述符以及查询属性的可读性/可写性的能力。
BeanWrapper 本身是一个接口,它提供了一整套处理 Bean 的方法。源码如下:
1 | public interface BeanWrapper extends ConfigurablePropertyAccessor { |
上面的 BeanWrapper 是基于4.3.6 版本的,这个接口在 4.1 版本之后略有改动。BeanWrapperImpl 是 BeanWrapper 的实现类,BeanWrapperImpl 的父类是 AbstractNestablePropertyAccessor,通过这个使得 BeanWrapper 具有处理属性的能力。
下面是一个使用 BeanWrapper 包装对象的例子:
1 | package com.glmapper.spring.test; |
在 Spring 中,有很多 Bean 属性的操作都是通过 BeanWrapper 来完成的,比如常见的 HttpServletBean 的属性设置就是。
注:本文摘自我的博客园文章,进行了一些包装,放在Spring源码系列中。
Spring中的 BeanWrapper
Spring 源码系列-BeanWrapper
http://www.glmapper.com/2018/02/07/spring/spring-ioc-bean-wrapper/