BeanWrapper 是Spring提供的一個用來操做javaBean屬性的工具,使用它能夠直接修改一個對象的屬性。html
對於bean屬性的操做,你們熟知的主要有下面這些工具類:java
Spring中BeanWrapper 的主要功能在於:spring
BeanWrapper自己是一個接口,它提供了一整套處理Bean的方法。源碼以下:數組
public interface BeanWrapper extends ConfigurablePropertyAccessor {
//爲數組和集合自動增加指定一個限制。在普通的BeanWrapper上默認是無限的。
void setAutoGrowCollectionLimit(int autoGrowCollectionLimit);
//返回數組和集合自動增加的限制。
int getAutoGrowCollectionLimit();
//若是有的話,返回由此對象包裝的bean實例
Object getWrappedInstance();
//返回被包裝的JavaBean對象的類型。
Class<?> getWrappedClass();
//獲取包裝對象的PropertyDescriptors(由標準JavaBeans自省肯定)。
PropertyDescriptor[] getPropertyDescriptors();
//獲取包裝對象的特定屬性的屬性描述符。
PropertyDescriptor getPropertyDescriptor(String propertyName) throws InvalidPropertyException;
}
複製代碼
上面的BeanWrapper是基於4.3.6版本的,這個接口在4.1版本以後略有改動。BeanWrapperImpl是BeanWrapper的實現類,BeanWrapperImpl的父類是AbstractNestablePropertyAccessor,經過這個使得BeanWrapper具備處理屬性的能力。微信
下面是一個使用BeanWrapper 包裝對象的例子:app
package com.glmapper.spring.test;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.PropertyAccessorFactory;
import org.springframework.beans.PropertyValue;
/** * BeanWrapper 測試類 */
public class BeanWrapperTest {
public static void main(String[] args) {
User user=new User();
//經過PropertyAccessorFactory將user對象封裝成BeanWrapper
BeanWrapper bw=PropertyAccessorFactory.forBeanPropertyAccess(user);
//方式一:直接對屬性值進行設置
bw.setPropertyValue("userName", "張三");
//方式二:經過PropertyValue進行設置
PropertyValue pv=new PropertyValue("userName","李四");
bw.setPropertyValue(pv);
System.out.println(user.getUserName());
}
}
//一個User類
class User{
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
複製代碼
在Spring中,有不少Bean屬性的操做都是經過BeanWrapper來完成的,好比常見的HttpServletBean的屬性設置就是。工具
注:本文摘自個人博客園文章,進行了一些包裝,放在Spring源碼系列中。
Spring中的 BeanWrapper測試
歡迎關注微信公衆號