Spring - 在不使用PropertyUtils的情况下获取类属性值(commons lib)

时间:2018-05-20 14:09:14

标签: java spring

我想在我的spring项目中从bean获取属性值。在我的项目中,我没有Commons BeanUtils。我也不想包含那个lib。

在春天,我需要替代下面的代码声明。

 PropertyUtils.getProperty(entity, field) 

1 个答案:

答案 0 :(得分:2)

与JDK内置的Commons BeanUtils最接近的等价物是java.beans.Introspector。这可以分析类上的getter和setter方法,并返回PropertyDescriptor[]的数组。

显然,这不是高级别的 - 你需要在该数组中寻找正确的属性。至少(没有异常处理):

public static Object getProperty(Object bean, String propertyName) {
    BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());
    PropertyDescriptor propertyDescriptor = Arrays
            .stream(beanInfo.getPropertyDescriptors())
            .filter(pd -> pd.getName().equals(propertyName)).findFirst()
            .get();
    return propertyDescriptor.getReadMethod().invoke(bean);
}

如果你在混合中使用Spring,org.springframework.beans.BeanUtils有助于找到PropertyDescriptor

    PropertyDescriptor propertyDescriptor = BeanUtils
            .getPropertyDescriptor(bean.getClass(), propertyName);

随着时间的推移,这也会更有效 - 在幕后Spring正在使用CachedIntrospectionResults