import org.springframework.cglib.beans.BeanCopier; import org.springframework.test.util.ReflectionTestUtils; /** * @author zhangyajing */ public class TestBeanUtil { /** * bean的属性设置 * @param source 源bean * @param fieldName 属性名称 * @param param 带赋值的内容 * @param <T> * @param <R> */ public static <T,R> void setField(T source, String fieldName, R param){ ReflectionTestUtils.setField(source,fieldName,param); } public static <T,R> void setFieldWhichSameAsMethodName(T source, R param){ String fieldName = parseFieldName(Thread.currentThread().getStackTrace()[2].getMethodName()); TestBeanUtil.setField(source,fieldName,param); } private static String parseFieldName(String methodName) { if(methodName.startsWith("set")){ methodName = methodName.substring(3); } return methodName.substring(0,1).toLowerCase() +methodName.substring(1); } public static <T,R> void setField(Class source, String method, Object... params) { ReflectionTestUtils.invokeMethod(source, method, params); } /** * 从source拷贝同属性名的字段,创建新的bean * @param source 原bean * @param fromClazz 原bean的class类型 * @param toClazz 目标bean的class类型 * @param <T> * @param <R> * @return 目标bean */ public static <T,R> R copyAndCreateBean(T source,Class<R> fromClazz,Class<R> toClazz){ try { R r = toClazz.newInstance(); final BeanCopier copier = BeanCopier.create(fromClazz, toClazz, false); copier.copy(source, r, null); return r; } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); throw new RuntimeException("反射创建"+toClazz.getTypeName()+"类型bean失败"); } } }
设置对象私有属性值
最新推荐文章于 2024-05-17 03:13:38 发布