From 7ac9fdd8e341207dc81c25aaec3ac9ccf81eef99 Mon Sep 17 00:00:00 2001
From: wangyu <727842003@qq.com>
Date: Tue, 16 Jul 2024 16:17:14 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E9=93=BE=E5=BC=8F?=
=?UTF-8?q?=E8=B0=83=E7=94=A8=EF=BC=8C=E6=94=AF=E6=8C=81reduce=E6=93=8D?=
=?UTF-8?q?=E4=BD=9C=E5=92=8C=E5=AD=98=E5=9C=A8=E6=80=A7=E5=88=A4=E5=AE=9A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../meta/parser/BeanPropertyAnnotations.java | 25 +++++++++++
.../parser/SimpleBeanPropertyAnnotations.java | 42 ++++++++++++++++++-
.../parser/chain/AnnotationChainSupport.java | 13 +++++-
.../BeanPropertyAnnotationBatchChain.java | 11 ++++-
.../chain/BeanPropertyAnnotationChain.java | 6 +++
.../impl/BasicAnnotationChainSupport.java | 19 ++++++---
.../chain/impl/EmptyAnnotationBatchChain.java | 32 ++++++++++++++
.../chain/impl/EmptyAnnotationChain.java | 31 ++++++++++++++
.../impl/SimpleAnnotationBatchChain.java | 33 +++++++++++++++
.../chain/impl/SimpleAnnotationChain.java | 30 +++++++++++++
10 files changed, 232 insertions(+), 10 deletions(-)
diff --git a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/BeanPropertyAnnotations.java b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/BeanPropertyAnnotations.java
index a09562d..5500416 100644
--- a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/BeanPropertyAnnotations.java
+++ b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/BeanPropertyAnnotations.java
@@ -53,6 +53,15 @@ public interface BeanPropertyAnnotations {
*/
BeanPropertyAnnotationChain> as(Class annotationType);
+ /**
+ * 判断某个注解是否存在,存在则交给consumer进行处理,仅取得找到的第一个注解
+ *
+ * @param annotationType 注解类型
+ * @param 泛型
+ * @return 结果
+ */
+ BeanPropertyAnnotationChain> as(String annotationType);
+
/**
* 判断某个注解是否存在,存在则交给consumer进行处理,取得所有注解并自动判断复数形式
*
@@ -80,6 +89,22 @@ public interface BeanPropertyAnnotations {
*/
boolean last();
+ /**
+ * 设置缓存的值
+ *
+ * @param value 值
+ * @param 值泛型
+ */
+ BeanPropertyAnnotations value(T value);
+
+ /**
+ * 返回上一步的值
+ *
+ * @param 泛型
+ * @return 结果
+ */
+ T value();
+
/**
* 返回空的运行链
*
diff --git a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/SimpleBeanPropertyAnnotations.java b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/SimpleBeanPropertyAnnotations.java
index 2e61374..f1ede48 100644
--- a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/SimpleBeanPropertyAnnotations.java
+++ b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/SimpleBeanPropertyAnnotations.java
@@ -31,6 +31,7 @@ public class SimpleBeanPropertyAnnotations implements BeanPropertyAnnotations {
private final EmptyAnnotationChain extends Annotation, ?> emptyChain = new EmptyAnnotationChain<>(this);
private final EmptyAnnotationBatchChain extends Annotation, ?> emptyBatchChain = new EmptyAnnotationBatchChain<>(this);
private boolean last;
+ private Object value;
SimpleBeanPropertyAnnotations(AnnotatedElement field) {
this.field = field;
@@ -68,6 +69,7 @@ public class SimpleBeanPropertyAnnotations implements BeanPropertyAnnotations {
* @return 结果
*/
@Override
+ @SuppressWarnings("Duplicates")
public BeanPropertyAnnotationChain> as(Class annotationType) {
if (null != field && !this.last) {
MergedAnnotation annotation = this.annotations.get(annotationType);
@@ -78,6 +80,24 @@ public class SimpleBeanPropertyAnnotations implements BeanPropertyAnnotations {
return empty();
}
+ /**
+ * 判断某个注解是否存在,存在则交给consumer进行处理,仅取得找到的第一个注解
+ *
+ * @param annotationType 注解类型
+ * @return 结果
+ */
+ @Override
+ @SuppressWarnings("Duplicates")
+ public BeanPropertyAnnotationChain> as(String annotationType) {
+ if (null != field && !this.last) {
+ MergedAnnotation annotation = this.annotations.get(annotationType);
+ if (annotation.isPresent()) {
+ return new SimpleAnnotationChain<>(this.last(true), annotation);
+ }
+ }
+ return empty();
+ }
+
/**
* 判断某个注解是否存在,存在则交给consumer进行处理,取得所有注解并自动判断复数形式
*
@@ -129,6 +149,27 @@ public class SimpleBeanPropertyAnnotations implements BeanPropertyAnnotations {
return this.last;
}
+ /**
+ * 设置缓存的值
+ *
+ * @param value 值
+ */
+ @Override
+ public BeanPropertyAnnotations value(T value) {
+ this.value = value;
+ return this;
+ }
+
+ /**
+ * 返回上一步的值
+ *
+ * @return 结果
+ */
+ @Override
+ public T value() {
+ return cast(value);
+ }
+
/**
* 返回空的运行链
*
@@ -145,7 +186,6 @@ public class SimpleBeanPropertyAnnotations implements BeanPropertyAnnotations {
* @return 结果
*/
@Override
-
public BeanPropertyAnnotationBatchChain batchEmpty() {
return cast(emptyBatchChain);
}
diff --git a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/AnnotationChainSupport.java b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/AnnotationChainSupport.java
index 183fcad..f5fa500 100644
--- a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/AnnotationChainSupport.java
+++ b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/AnnotationChainSupport.java
@@ -24,7 +24,16 @@ public interface AnnotationChainSupport {
BeanPropertyAnnotations or();
/**
- * 主动停止操作,会清空前面的状态
+ * 当前值是否存在
+ *
+ * @return 结果
*/
- void end();
+ boolean isPresent();
+
+ /**
+ * 主动停止操作,会清空前面的状态
+ *
+ * @return 结束状态,true则是以值结束,false以空结束
+ */
+ boolean end();
}
diff --git a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/BeanPropertyAnnotationBatchChain.java b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/BeanPropertyAnnotationBatchChain.java
index c725192..4984967 100644
--- a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/BeanPropertyAnnotationBatchChain.java
+++ b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/BeanPropertyAnnotationBatchChain.java
@@ -64,12 +64,19 @@ public interface BeanPropertyAnnotationBatchChain exten
*/
BeanPropertyAnnotationBatchChain empty(Runnable fallback);
+ /**
+ * 将多值合并为单值
+ *
+ * @param reducer 合并器
+ * @param 返回泛型
+ * @return 结果
+ */
+ BeanPropertyAnnotationChain reduce(Function, R> reducer);
+
/**
* 获取所有结果为list
*
* @return 结果
*/
List synthesize();
-
-
}
diff --git a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/BeanPropertyAnnotationChain.java b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/BeanPropertyAnnotationChain.java
index 088a613..afb4b5b 100644
--- a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/BeanPropertyAnnotationChain.java
+++ b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/BeanPropertyAnnotationChain.java
@@ -70,4 +70,10 @@ public interface BeanPropertyAnnotationChain extends An
*/
A synthesize();
+ /**
+ * 获取缓存的值
+ *
+ * @return 结果
+ */
+ T get();
}
diff --git a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/BasicAnnotationChainSupport.java b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/BasicAnnotationChainSupport.java
index cbf0fe9..398c4d0 100644
--- a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/BasicAnnotationChainSupport.java
+++ b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/BasicAnnotationChainSupport.java
@@ -10,7 +10,7 @@ import lombok.RequiredArgsConstructor;
* @author wangyu
*/
@RequiredArgsConstructor
-public class BasicAnnotationChainSupport implements AnnotationChainSupport {
+abstract class BasicAnnotationChainSupport implements AnnotationChainSupport {
// 父级
protected final BeanPropertyAnnotations parent;
@@ -22,7 +22,7 @@ public class BasicAnnotationChainSupport implements AnnotationChainSupport {
*/
@Override
public BeanPropertyAnnotations and() {
- return parent.last(false);
+ return cache().last(false);
}
/**
@@ -32,14 +32,23 @@ public class BasicAnnotationChainSupport implements AnnotationChainSupport {
*/
@Override
public BeanPropertyAnnotations or() {
- return parent;
+ return cache();
}
/**
* 主动停止操作,会清空前面的状态
*/
@Override
- public void end() {
- parent.last(false);
+ public boolean end() {
+ boolean result = isPresent();
+ parent.last(false).value(null);
+ return result;
}
+
+ /**
+ * 缓存值逻辑
+ *
+ * @return 父亲
+ */
+ protected abstract BeanPropertyAnnotations cache();
}
diff --git a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/EmptyAnnotationBatchChain.java b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/EmptyAnnotationBatchChain.java
index 2b7c26a..0787bad 100644
--- a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/EmptyAnnotationBatchChain.java
+++ b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/EmptyAnnotationBatchChain.java
@@ -2,6 +2,7 @@ package dev.flyfish.framework.beans.meta.parser.chain.impl;
import dev.flyfish.framework.beans.meta.parser.BeanPropertyAnnotations;
import dev.flyfish.framework.beans.meta.parser.chain.BeanPropertyAnnotationBatchChain;
+import dev.flyfish.framework.beans.meta.parser.chain.BeanPropertyAnnotationChain;
import java.lang.annotation.Annotation;
import java.util.Collections;
@@ -94,6 +95,27 @@ public class EmptyAnnotationBatchChain extends BasicAnn
return this;
}
+ /**
+ * 将多值合并为单值
+ *
+ * @param reducer 合并器
+ * @return 结果
+ */
+ @Override
+ public BeanPropertyAnnotationChain reduce(Function, R> reducer) {
+ return parent.empty();
+ }
+
+ /**
+ * 是否存在值
+ *
+ * @return 结果
+ */
+ @Override
+ public boolean isPresent() {
+ return false;
+ }
+
/**
* 获取所有结果为list
*
@@ -104,4 +126,14 @@ public class EmptyAnnotationBatchChain extends BasicAnn
parent.last(false);
return Collections.emptyList();
}
+
+ /**
+ * 缓存值逻辑
+ *
+ * @return 父亲
+ */
+ @Override
+ protected BeanPropertyAnnotations cache() {
+ return parent;
+ }
}
diff --git a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/EmptyAnnotationChain.java b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/EmptyAnnotationChain.java
index 345cd54..abf3d45 100644
--- a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/EmptyAnnotationChain.java
+++ b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/EmptyAnnotationChain.java
@@ -93,6 +93,16 @@ public class EmptyAnnotationChain extends BasicAnnotati
return this;
}
+ /**
+ * 当前值是否存在
+ *
+ * @return 结果
+ */
+ @Override
+ public boolean isPresent() {
+ return false;
+ }
+
/**
* 直接获取结果
*
@@ -102,4 +112,25 @@ public class EmptyAnnotationChain extends BasicAnnotati
public A synthesize() {
return null;
}
+
+ /**
+ * 获取当前数据
+ *
+ * @return 结果
+ */
+ @Override
+ public T get() {
+ // 从空的占位访问,访问上次的结果
+ return parent.value();
+ }
+
+ /**
+ * 缓存值逻辑
+ *
+ * @return 父亲
+ */
+ @Override
+ protected BeanPropertyAnnotations cache() {
+ return parent;
+ }
}
diff --git a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/SimpleAnnotationBatchChain.java b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/SimpleAnnotationBatchChain.java
index 3c89943..540ba12 100644
--- a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/SimpleAnnotationBatchChain.java
+++ b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/SimpleAnnotationBatchChain.java
@@ -2,6 +2,7 @@ package dev.flyfish.framework.beans.meta.parser.chain.impl;
import dev.flyfish.framework.beans.meta.parser.BeanPropertyAnnotations;
import dev.flyfish.framework.beans.meta.parser.chain.BeanPropertyAnnotationBatchChain;
+import dev.flyfish.framework.beans.meta.parser.chain.BeanPropertyAnnotationChain;
import org.springframework.core.annotation.MergedAnnotation;
import org.springframework.util.CollectionUtils;
@@ -121,6 +122,28 @@ public class SimpleAnnotationBatchChain extends BasicAn
return this;
}
+ /**
+ * 将多值合并为单值
+ *
+ * @param reducer 合并器
+ * @return 结果
+ */
+ @Override
+ public BeanPropertyAnnotationChain reduce(Function, R> reducer) {
+ R reduced = reducer.apply(values);
+ return new SimpleAnnotationChain<>(parent, reduced);
+ }
+
+ /**
+ * 是否存在值
+ *
+ * @return 结果
+ */
+ @Override
+ public boolean isPresent() {
+ return !CollectionUtils.isEmpty(values);
+ }
+
/**
* 获取所有结果为list
*
@@ -132,4 +155,14 @@ public class SimpleAnnotationBatchChain extends BasicAn
return mapped ? Collections.emptyList() : this.values.stream().map(item -> (MergedAnnotation) item)
.map(MergedAnnotation::synthesize).collect(Collectors.toList());
}
+
+ /**
+ * 缓存值逻辑
+ *
+ * @return 父亲
+ */
+ @Override
+ protected BeanPropertyAnnotations cache() {
+ return parent.value(values);
+ }
}
diff --git a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/SimpleAnnotationChain.java b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/SimpleAnnotationChain.java
index ec8a7fa..a292d57 100644
--- a/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/SimpleAnnotationChain.java
+++ b/flyfish-bean/src/main/java/dev/flyfish/framework/beans/meta/parser/chain/impl/SimpleAnnotationChain.java
@@ -111,6 +111,16 @@ public class SimpleAnnotationChain extends BasicAnnotat
return this;
}
+ /**
+ * 当前值是否存在
+ *
+ * @return 结果
+ */
+ @Override
+ public boolean isPresent() {
+ return null != value;
+ }
+
/**
* 直接获取结果
*
@@ -122,4 +132,24 @@ public class SimpleAnnotationChain extends BasicAnnotat
parent.last(false);
return value instanceof MergedAnnotation ? ((MergedAnnotation) value).synthesize() : null;
}
+
+ /**
+ * 获取缓存的值
+ *
+ * @return 结果
+ */
+ @Override
+ public T get() {
+ return value;
+ }
+
+ /**
+ * 缓存值逻辑
+ *
+ * @return 父亲
+ */
+ @Override
+ protected BeanPropertyAnnotations cache() {
+ return parent.value(value);
+ }
}