From 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a Mon Sep 17 00:00:00 2001 From: xiejun <xiejun@vci-tech.com> Date: 星期五, 01 十一月 2024 15:11:19 +0800 Subject: [PATCH] Revert "集成获取mdm分发通用数据格式接口集成" --- Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/ReflectUtil.java | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 180 insertions(+), 0 deletions(-) diff --git a/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/ReflectUtil.java b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/ReflectUtil.java new file mode 100644 index 0000000..68b0fe2 --- /dev/null +++ b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/ReflectUtil.java @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2018-2028, DreamLu All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: DreamLu 鍗㈡槬姊� (596392912@qq.com) + */ +package org.springblade.core.tool.utils; + +import org.springframework.beans.BeansException; +import org.springframework.cglib.core.CodeGenerationException; +import org.springframework.core.convert.Property; +import org.springframework.core.convert.TypeDescriptor; +import org.springframework.lang.Nullable; +import org.springframework.util.ReflectionUtils; + +import java.beans.PropertyDescriptor; +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +/** + * 鍙嶅皠宸ュ叿绫� + * + * @author L.cm + */ +public class ReflectUtil extends ReflectionUtils { + + /** + * 鑾峰彇 Bean 鐨勬墍鏈� get鏂规硶 + * + * @param type 绫� + * @return PropertyDescriptor鏁扮粍 + */ + public static PropertyDescriptor[] getBeanGetters(Class type) { + return getPropertiesHelper(type, true, false); + } + + /** + * 鑾峰彇 Bean 鐨勬墍鏈� set鏂规硶 + * + * @param type 绫� + * @return PropertyDescriptor鏁扮粍 + */ + public static PropertyDescriptor[] getBeanSetters(Class type) { + return getPropertiesHelper(type, false, true); + } + + /** + * 鑾峰彇 Bean 鐨勬墍鏈� PropertyDescriptor + * + * @param type 绫� + * @param read 璇诲彇鏂规硶 + * @param write 鍐欐柟娉� + * @return PropertyDescriptor鏁扮粍 + */ + public static PropertyDescriptor[] getPropertiesHelper(Class type, boolean read, boolean write) { + try { + PropertyDescriptor[] all = BeanUtil.getPropertyDescriptors(type); + if (read && write) { + return all; + } else { + List<PropertyDescriptor> properties = new ArrayList<>(all.length); + for (PropertyDescriptor pd : all) { + if (read && pd.getReadMethod() != null) { + properties.add(pd); + } else if (write && pd.getWriteMethod() != null) { + properties.add(pd); + } + } + return properties.toArray(new PropertyDescriptor[0]); + } + } catch (BeansException ex) { + throw new CodeGenerationException(ex); + } + } + + /** + * 鑾峰彇 bean 鐨勫睘鎬т俊鎭� + * @param propertyType 绫诲瀷 + * @param propertyName 灞炴�у悕 + * @return {Property} + */ + @Nullable + public static Property getProperty(Class<?> propertyType, String propertyName) { + PropertyDescriptor propertyDescriptor = BeanUtil.getPropertyDescriptor(propertyType, propertyName); + if (propertyDescriptor == null) { + return null; + } + return ReflectUtil.getProperty(propertyType, propertyDescriptor, propertyName); + } + + /** + * 鑾峰彇 bean 鐨勫睘鎬т俊鎭� + * @param propertyType 绫诲瀷 + * @param propertyDescriptor PropertyDescriptor + * @param propertyName 灞炴�у悕 + * @return {Property} + */ + public static Property getProperty(Class<?> propertyType, PropertyDescriptor propertyDescriptor, String propertyName) { + Method readMethod = propertyDescriptor.getReadMethod(); + Method writeMethod = propertyDescriptor.getWriteMethod(); + return new Property(propertyType, readMethod, writeMethod, propertyName); + } + + /** + * 鑾峰彇 bean 鐨勫睘鎬т俊鎭� + * @param propertyType 绫诲瀷 + * @param propertyName 灞炴�у悕 + * @return {Property} + */ + @Nullable + public static TypeDescriptor getTypeDescriptor(Class<?> propertyType, String propertyName) { + Property property = ReflectUtil.getProperty(propertyType, propertyName); + if (property == null) { + return null; + } + return new TypeDescriptor(property); + } + + /** + * 鑾峰彇 绫诲睘鎬т俊鎭� + * @param propertyType 绫诲瀷 + * @param propertyDescriptor PropertyDescriptor + * @param propertyName 灞炴�у悕 + * @return {Property} + */ + public static TypeDescriptor getTypeDescriptor(Class<?> propertyType, PropertyDescriptor propertyDescriptor, String propertyName) { + Method readMethod = propertyDescriptor.getReadMethod(); + Method writeMethod = propertyDescriptor.getWriteMethod(); + Property property = new Property(propertyType, readMethod, writeMethod, propertyName); + return new TypeDescriptor(property); + } + + /** + * 鑾峰彇 绫诲睘鎬� + * @param clazz 绫讳俊鎭� + * @param fieldName 灞炴�у悕 + * @return Field + */ + @Nullable + public static Field getField(Class<?> clazz, String fieldName) { + while (clazz != Object.class) { + try { + return clazz.getDeclaredField(fieldName); + } catch (NoSuchFieldException e) { + clazz = clazz.getSuperclass(); + } + } + return null; + } + + /** + * 鑾峰彇 鎵�鏈� field 灞炴�т笂鐨勬敞瑙� + * @param clazz 绫� + * @param fieldName 灞炴�у悕 + * @param annotationClass 娉ㄨВ + * @param <T> 娉ㄨВ娉涘瀷 + * @return 娉ㄨВ + */ + @Nullable + public static <T extends Annotation> T getAnnotation(Class<?> clazz, String fieldName, Class<T> annotationClass) { + Field field = ReflectUtil.getField(clazz, fieldName); + if (field == null) { + return null; + } + return field.getAnnotation(annotationClass); + } +} -- Gitblit v1.9.3