我想在我的spring项目中从bean获取属性值。在我的项目中,我没有Commons BeanUtils。我也不想包含那个lib。
在春天,我需要替代下面的代码声明。
PropertyUtils.getProperty(entity, field)
答案 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
。