diff --git a/easy-es-annotation/src/main/java/cn/easyes/annotation/Signature.java b/easy-es-annotation/src/main/java/cn/easyes/annotation/Signature.java
index aee198fd..a06fbc5c 100644
--- a/easy-es-annotation/src/main/java/cn/easyes/annotation/Signature.java
+++ b/easy-es-annotation/src/main/java/cn/easyes/annotation/Signature.java
@@ -39,4 +39,10 @@ public @interface Signature {
*/
Class>[] args();
+ /**
+ * use regexp
+ * @return java method name is use regexp
+ */
+ boolean useRegexp() default false;
+
}
diff --git a/easy-es-extension/src/main/java/cn/easyes/extension/plugins/Plugin.java b/easy-es-extension/src/main/java/cn/easyes/extension/plugins/Plugin.java
index 2b8d4b0b..3a880c0f 100644
--- a/easy-es-extension/src/main/java/cn/easyes/extension/plugins/Plugin.java
+++ b/easy-es-extension/src/main/java/cn/easyes/extension/plugins/Plugin.java
@@ -3,6 +3,8 @@ package cn.easyes.extension.plugins;
import cn.easyes.annotation.Intercepts;
import cn.easyes.annotation.Signature;
+import cn.easyes.common.exception.EasyEsException;
+import cn.easyes.common.utils.CollectionUtils;
import cn.easyes.common.utils.ExceptionUtils;
import cn.easyes.extension.context.Interceptor;
import cn.easyes.extension.context.Invocation;
@@ -10,10 +12,13 @@ import cn.easyes.extension.context.Invocation;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
/**
*
@@ -76,14 +81,26 @@ public class Plugin implements InvocationHandler {
// 检查被@Signature标记的方法是否存在
for (Signature sig : sigs) {
Set methods = signatureMap.computeIfAbsent(sig.type(), k -> new HashSet<>());
- try {
- Method method = sig.type().getMethod(sig.method(), sig.args());
- methods.add(method);
- } catch (NoSuchMethodException e) {
- throw new RuntimeException("Could not find method on " + sig.type() + " named " + sig.method() + ". Cause: " + e, e);
+ if (sig.useRegexp()) {
+ Pattern pattern = Pattern.compile(sig.method());
+ Set methodSet = Arrays.stream(sig.type().getMethods())
+ .filter(item -> pattern.matcher(item.getName()).matches())
+ .collect(Collectors.toSet());
+
+ if (CollectionUtils.isEmpty(methodSet)) {
+ throw new EasyEsException("This regular expression does not match any methods:" + sig.type() + " named " + sig.method());
+ }
+ methods.addAll(methodSet);
+ } else {
+ try {
+ Method method = sig.type().getMethod(sig.method(), sig.args());
+ methods.add(method);
+ } catch (NoSuchMethodException e) {
+ throw new EasyEsException("Could not find method on " + sig.type() + " named " + sig.method() + ". Cause: " + e, e);
+ }
}
}
return signatureMap;
}
-}
\ No newline at end of file
+}
diff --git a/easy-es-test/src/main/java/cn/easyes/test/interceptor/TenantLineInnerInterceptor.java b/easy-es-test/src/main/java/cn/easyes/test/interceptor/TenantLineInnerInterceptor.java
new file mode 100644
index 00000000..8e74e27f
--- /dev/null
+++ b/easy-es-test/src/main/java/cn/easyes/test/interceptor/TenantLineInnerInterceptor.java
@@ -0,0 +1,43 @@
+package cn.easyes.test.interceptor;
+
+
+import org.elasticsearch.action.search.SearchRequest;
+import org.elasticsearch.client.RequestOptions;
+import org.springframework.stereotype.Component;
+
+import cn.easyes.annotation.Intercepts;
+import cn.easyes.annotation.Signature;
+import cn.easyes.core.conditions.LambdaEsQueryWrapper;
+import cn.easyes.core.conditions.interfaces.BaseEsMapper;
+import cn.easyes.extension.context.Interceptor;
+import cn.easyes.extension.context.Invocation;
+
+/**
+ * 测试方法使用正则表达式
+ * @author huangjy
+ */
+@Intercepts(
+ {
+ @Signature(type = BaseEsMapper.class, method = "select.*", args = {LambdaEsQueryWrapper.class}, useRegexp = true),
+ @Signature(type = BaseEsMapper.class, method = "search", args = {SearchRequest.class, RequestOptions.class}),
+ @Signature(type = BaseEsMapper.class, method = "insert|update", args = {Object.class}, useRegexp = true),
+ @Signature(type = BaseEsMapper.class, method = ".*ById", args = {Object.class}, useRegexp = true),
+ }
+)
+// @Component
+public class TenantLineInnerInterceptor implements Interceptor {
+
+
+ @Override
+ public Object intercept(Invocation invocation) throws Throwable {
+ // Object[] args = invocation.getArgs();
+ // Object arg = args[0];
+ // if (arg instanceof LambdaEsQueryWrapper) {
+ // LambdaEsQueryWrapper wrapper = ((LambdaEsQueryWrapper) args[0]);
+ // wrapper.eq("tenantId", "1");
+ // return invocation.proceed();
+ // }
+ System.out.println("增则拦截方法");
+ return invocation.proceed();
+ }
+}