From 012235d05d8dc7c2decdc7229d93033b0399ecbb Mon Sep 17 00:00:00 2001
From: xiejun <xiejun@vci-tech.com>
Date: 星期日, 10 十一月 2024 15:49:53 +0800
Subject: [PATCH] 集成获取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