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/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