From c11e2a935fabb03ec662be9173cd43fa17816282 Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 25 Nov 2020 23:29:26 +0800 Subject: [PATCH] add mathod --- CHANGELOG.md | 3 ++- .../core/annotation/AnnotationUtil.java | 20 +++++++------------ 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ec59619be..f78e5883b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ------------------------------------------------------------------------------------------------------------- -# 5.5.2 (2020-11-20) +# 5.5.2 (2020-11-25) ### 新特性 * 【crypto 】 KeyUtil增加重载,AES构造增加重载(issue#I25NNZ@Gitee) @@ -12,6 +12,7 @@ * 【extra 】 新增Rhino表达式执行引擎(pr#1229@Github) * 【crypto 】 增加判空(issue#1230@Github) * 【core 】 xml.setXmlStandalone(true)格式优化(pr#1234@Github) +* 【core 】 AnnotationUtil增加setValue方法(pr#1250@Github) ### Bug修复 * 【cron 】 修复CronTimer可能死循环的问题(issue#1224@Github) diff --git a/hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationUtil.java b/hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationUtil.java index 32e3571c0..7c6b841fd 100644 --- a/hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/annotation/AnnotationUtil.java @@ -12,8 +12,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.HashMap; @@ -205,20 +203,16 @@ public class AnnotationUtil { } /** - * 刷新注解的属性值 + * 设置新的注解的属性(字段)值 + * * @param annotation 注解对象 - * @param annotationField 注解属性名称 + * @param annotationField 注解属性(字段)名称 * @param value 要更新的属性值 - * @throws Exception 可能出现的异常(一般情况下不会发生) + * @since 5.5.2 */ - public static void refreshAnnotationValue(Annotation annotation, String annotationField, Object value) throws Exception { - InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation); - Field field = invocationHandler.getClass().getDeclaredField("memberValues"); - boolean accessible = field.isAccessible(); - field.setAccessible(true); - @SuppressWarnings("unchecked") - Map memberValues = (Map) field.get(invocationHandler); + @SuppressWarnings({"rawtypes", "unchecked"}) + public static void setValue(Annotation annotation, String annotationField, Object value) { + final Map memberValues = (Map) ReflectUtil.getFieldValue(Proxy.getInvocationHandler(annotation), "memberValues"); memberValues.put(annotationField, value); - field.setAccessible(accessible); } }