From 9b4433fddf5b401edb0aace8a404ac733b122702 Mon Sep 17 00:00:00 2001
From: 田源 <tianyuan@vci-tech.com>
Date: 星期四, 03 四月 2025 14:35:02 +0800
Subject: [PATCH] 添加非密字段显示

---
 Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/ClassUtil.java |  130 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 130 insertions(+), 0 deletions(-)

diff --git a/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/ClassUtil.java b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/ClassUtil.java
new file mode 100644
index 0000000..27a8096
--- /dev/null
+++ b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/ClassUtil.java
@@ -0,0 +1,130 @@
+/*
+ *      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.core.BridgeMethodResolver;
+import org.springframework.core.DefaultParameterNameDiscoverer;
+import org.springframework.core.MethodParameter;
+import org.springframework.core.ParameterNameDiscoverer;
+import org.springframework.core.annotation.AnnotatedElementUtils;
+import org.springframework.core.annotation.SynthesizingMethodParameter;
+import org.springframework.web.method.HandlerMethod;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+/**
+ * 绫绘搷浣滃伐鍏�
+ *
+ * @author L.cm
+ */
+public class ClassUtil extends org.springframework.util.ClassUtils {
+
+	private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new DefaultParameterNameDiscoverer();
+
+	/**
+	 * 鑾峰彇鏂规硶鍙傛暟淇℃伅
+	 *
+	 * @param constructor    鏋勯�犲櫒
+	 * @param parameterIndex 鍙傛暟搴忓彿
+	 * @return {MethodParameter}
+	 */
+	public static MethodParameter getMethodParameter(Constructor<?> constructor, int parameterIndex) {
+		MethodParameter methodParameter = new SynthesizingMethodParameter(constructor, parameterIndex);
+		methodParameter.initParameterNameDiscovery(PARAMETER_NAME_DISCOVERER);
+		return methodParameter;
+	}
+
+	/**
+	 * 鑾峰彇鏂规硶鍙傛暟淇℃伅
+	 *
+	 * @param method         鏂规硶
+	 * @param parameterIndex 鍙傛暟搴忓彿
+	 * @return {MethodParameter}
+	 */
+	public static MethodParameter getMethodParameter(Method method, int parameterIndex) {
+		MethodParameter methodParameter = new SynthesizingMethodParameter(method, parameterIndex);
+		methodParameter.initParameterNameDiscovery(PARAMETER_NAME_DISCOVERER);
+		return methodParameter;
+	}
+
+	/**
+	 * 鑾峰彇Annotation
+	 *
+	 * @param method         Method
+	 * @param annotationType 娉ㄨВ绫�
+	 * @param <A>            娉涘瀷鏍囪
+	 * @return {Annotation}
+	 */
+	public static <A extends Annotation> A getAnnotation(Method method, Class<A> annotationType) {
+		Class<?> targetClass = method.getDeclaringClass();
+		// The method may be on an interface, but we need attributes from the target class.
+		// If the target class is null, the method will be unchanged.
+		Method specificMethod = ClassUtil.getMostSpecificMethod(method, targetClass);
+		// If we are dealing with method with generic parameters, find the original method.
+		specificMethod = BridgeMethodResolver.findBridgedMethod(specificMethod);
+		// 鍏堟壘鏂规硶锛屽啀鎵炬柟娉曚笂鐨勭被
+		A annotation = AnnotatedElementUtils.findMergedAnnotation(specificMethod, annotationType);
+		;
+		if (null != annotation) {
+			return annotation;
+		}
+		// 鑾峰彇绫讳笂闈㈢殑Annotation锛屽彲鑳藉寘鍚粍鍚堟敞瑙o紝鏁呴噰鐢╯pring鐨勫伐鍏风被
+		return AnnotatedElementUtils.findMergedAnnotation(specificMethod.getDeclaringClass(), annotationType);
+	}
+
+	/**
+	 * 鑾峰彇Annotation
+	 *
+	 * @param handlerMethod  HandlerMethod
+	 * @param annotationType 娉ㄨВ绫�
+	 * @param <A>            娉涘瀷鏍囪
+	 * @return {Annotation}
+	 */
+	public static <A extends Annotation> A getAnnotation(HandlerMethod handlerMethod, Class<A> annotationType) {
+		// 鍏堟壘鏂规硶锛屽啀鎵炬柟娉曚笂鐨勭被
+		A annotation = handlerMethod.getMethodAnnotation(annotationType);
+		if (null != annotation) {
+			return annotation;
+		}
+		// 鑾峰彇绫讳笂闈㈢殑Annotation锛屽彲鑳藉寘鍚粍鍚堟敞瑙o紝鏁呴噰鐢╯pring鐨勫伐鍏风被
+		Class<?> beanType = handlerMethod.getBeanType();
+		return AnnotatedElementUtils.findMergedAnnotation(beanType, annotationType);
+	}
+
+
+	/**
+	 * 鍒ゆ柇鏄惁鏈夋敞瑙� Annotation
+	 *
+	 * @param method         Method
+	 * @param annotationType 娉ㄨВ绫�
+	 * @param <A>            娉涘瀷鏍囪
+	 * @return {boolean}
+	 */
+	public static <A extends Annotation> boolean isAnnotated(Method method, Class<A> annotationType) {
+		// 鍏堟壘鏂规硶锛屽啀鎵炬柟娉曚笂鐨勭被
+		boolean isMethodAnnotated = AnnotatedElementUtils.isAnnotated(method, annotationType);
+		if (isMethodAnnotated) {
+			return true;
+		}
+		// 鑾峰彇绫讳笂闈㈢殑Annotation锛屽彲鑳藉寘鍚粍鍚堟敞瑙o紝鏁呴噰鐢╯pring鐨勫伐鍏风被
+		Class<?> targetClass = method.getDeclaringClass();
+		return AnnotatedElementUtils.isAnnotated(targetClass, annotationType);
+	}
+
+}

--
Gitblit v1.9.3