From 6cb3355bc9298dfbe2417bd9c77e203df1e83475 Mon Sep 17 00:00:00 2001
From: wanggeng <450292408@qq.com>
Date: Mon, 20 Sep 2021 16:15:30 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=BF=9C=E7=A8=8B=E8=B0=83?=
=?UTF-8?q?=E7=94=A8Spring=E8=87=AA=E5=8A=A8=E6=89=AB=E6=8F=8F=E6=B3=A8?=
=?UTF-8?q?=E5=85=A5=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
basic-util/pom.xml | 5 ++
.../rest/handler/RestRemoteHandler.java | 20 ++++----
.../rest/scanner/RemoteRestFactoryBean.java | 44 ++++++++++++++++++
.../rest/scanner/RemoteRestScanner.java | 46 +++++++++++++++++++
.../RemoteRestScannerConfiguration.java | 36 +++++++++++++++
basic-util/src/test/java/RemoteTest.java | 30 ++++++------
6 files changed, 156 insertions(+), 25 deletions(-)
create mode 100644 basic-util/src/main/java/ink/wgink/util/remote/rest/scanner/RemoteRestFactoryBean.java
create mode 100644 basic-util/src/main/java/ink/wgink/util/remote/rest/scanner/RemoteRestScanner.java
create mode 100644 basic-util/src/main/java/ink/wgink/util/remote/rest/scanner/RemoteRestScannerConfiguration.java
diff --git a/basic-util/pom.xml b/basic-util/pom.xml
index fde7105e..daa6a00a 100644
--- a/basic-util/pom.xml
+++ b/basic-util/pom.xml
@@ -151,6 +151,11 @@
basic-pojo
1.0-SNAPSHOT
+
+ ink.wgink
+ basic-properties
+ 1.0-SNAPSHOT
+
diff --git a/basic-util/src/main/java/ink/wgink/util/remote/rest/handler/RestRemoteHandler.java b/basic-util/src/main/java/ink/wgink/util/remote/rest/handler/RestRemoteHandler.java
index 3c426d06..8f2095d0 100644
--- a/basic-util/src/main/java/ink/wgink/util/remote/rest/handler/RestRemoteHandler.java
+++ b/basic-util/src/main/java/ink/wgink/util/remote/rest/handler/RestRemoteHandler.java
@@ -1,14 +1,14 @@
package ink.wgink.util.remote.rest.handler;
-import ink.wgink.annotation.remote.RemoteServer;
-import ink.wgink.annotation.remote.method.RemoteDeleteMethod;
-import ink.wgink.annotation.remote.method.RemoteGetMethod;
-import ink.wgink.annotation.remote.method.RemotePostMethod;
-import ink.wgink.annotation.remote.method.RemotePutMethod;
-import ink.wgink.annotation.remote.params.RemoteHeaderParams;
-import ink.wgink.annotation.remote.params.RemoteJsonBodyParams;
-import ink.wgink.annotation.remote.params.RemotePathParams;
-import ink.wgink.annotation.remote.params.RemoteQueryParams;
+import ink.wgink.annotation.remote.rest.params.RemoteServerParams;
+import ink.wgink.annotation.remote.rest.method.RemoteDeleteMethod;
+import ink.wgink.annotation.remote.rest.method.RemoteGetMethod;
+import ink.wgink.annotation.remote.rest.method.RemotePostMethod;
+import ink.wgink.annotation.remote.rest.method.RemotePutMethod;
+import ink.wgink.annotation.remote.rest.params.RemoteHeaderParams;
+import ink.wgink.annotation.remote.rest.params.RemoteJsonBodyParams;
+import ink.wgink.annotation.remote.rest.params.RemotePathParams;
+import ink.wgink.annotation.remote.rest.params.RemoteQueryParams;
import ink.wgink.exceptions.ParamsException;
import ink.wgink.exceptions.base.SystemException;
import ink.wgink.util.RegexUtil;
@@ -242,7 +242,7 @@ public class RestRemoteHandler implements InvocationHandler {
private String getRemotePath(Parameter[] parameters, Object[] args) {
for (int i = 0; i < parameters.length; i++) {
Parameter parameter = parameters[i];
- if (!parameter.isAnnotationPresent(RemoteServer.class)) {
+ if (!parameter.isAnnotationPresent(RemoteServerParams.class)) {
continue;
}
if (args[i] == null) {
diff --git a/basic-util/src/main/java/ink/wgink/util/remote/rest/scanner/RemoteRestFactoryBean.java b/basic-util/src/main/java/ink/wgink/util/remote/rest/scanner/RemoteRestFactoryBean.java
new file mode 100644
index 00000000..6afe14e8
--- /dev/null
+++ b/basic-util/src/main/java/ink/wgink/util/remote/rest/scanner/RemoteRestFactoryBean.java
@@ -0,0 +1,44 @@
+package ink.wgink.util.remote.rest.scanner;
+
+import ink.wgink.util.remote.rest.proxy.RestRemoteProxy;
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.beans.factory.InitializingBean;
+
+/**
+ * @ClassName: RemoteRestFactoryBean
+ * @Description: 远程调用bean工厂
+ * @Author: wanggeng
+ * @Date: 2021/9/20 9:27 上午
+ * @Version: 1.0
+ */
+public class RemoteRestFactoryBean implements InitializingBean, FactoryBean {
+
+ private String innerClassName;
+
+ @Override
+ public T getObject() throws Exception {
+ return (T) RestRemoteProxy.getInstance(Class.forName(innerClassName));
+ }
+
+ @Override
+ public Class> getObjectType() {
+ try {
+ return Class.forName(innerClassName);
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public boolean isSingleton() {
+ return true;
+ }
+
+ @Override
+ public void afterPropertiesSet() throws Exception {
+ }
+
+ public void setInnerClassName(String innerClassName) {
+ this.innerClassName = innerClassName;
+ }
+}
diff --git a/basic-util/src/main/java/ink/wgink/util/remote/rest/scanner/RemoteRestScanner.java b/basic-util/src/main/java/ink/wgink/util/remote/rest/scanner/RemoteRestScanner.java
new file mode 100644
index 00000000..12e73df7
--- /dev/null
+++ b/basic-util/src/main/java/ink/wgink/util/remote/rest/scanner/RemoteRestScanner.java
@@ -0,0 +1,46 @@
+package ink.wgink.util.remote.rest.scanner;
+
+import ink.wgink.annotation.remote.rest.RemoteService;
+import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition;
+import org.springframework.beans.factory.config.BeanDefinitionHolder;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.beans.factory.support.GenericBeanDefinition;
+import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
+import org.springframework.core.type.filter.AnnotationTypeFilter;
+
+import java.util.Set;
+
+/**
+ * @ClassName: RemoteRestScanner
+ * @Description: Rest远程类扫描器
+ * @Author: wanggeng
+ * @Date: 2021/9/20 9:26 上午
+ * @Version: 1.0
+ */
+public class RemoteRestScanner extends ClassPathBeanDefinitionScanner {
+
+ public RemoteRestScanner(BeanDefinitionRegistry registry) {
+ super(registry);
+ }
+
+ @Override
+ public void registerDefaultFilters() {
+ this.addIncludeFilter(new AnnotationTypeFilter(RemoteService.class));
+ }
+
+ @Override
+ public Set doScan(String... basePackages) {
+ Set beanDefinitions = super.doScan(basePackages);
+ for (BeanDefinitionHolder holder : beanDefinitions) {
+ GenericBeanDefinition definition = (GenericBeanDefinition) holder.getBeanDefinition();
+ definition.getPropertyValues().add("innerClassName", definition.getBeanClassName());
+ definition.setBeanClass(RemoteRestFactoryBean.class);
+ }
+ return beanDefinitions;
+ }
+
+ @Override
+ public boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) {
+ return beanDefinition.getMetadata().hasAnnotation(RemoteService.class.getName());
+ }
+}
diff --git a/basic-util/src/main/java/ink/wgink/util/remote/rest/scanner/RemoteRestScannerConfiguration.java b/basic-util/src/main/java/ink/wgink/util/remote/rest/scanner/RemoteRestScannerConfiguration.java
new file mode 100644
index 00000000..b2ea770b
--- /dev/null
+++ b/basic-util/src/main/java/ink/wgink/util/remote/rest/scanner/RemoteRestScannerConfiguration.java
@@ -0,0 +1,36 @@
+package ink.wgink.util.remote.rest.scanner;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @ClassName: RemoteRestScanner
+ * @Description: Rest远程类扫描
+ * @Author: wanggeng
+ * @Date: 2021/9/19 11:49 下午
+ * @Version: 1.0
+ */
+@Component
+public class RemoteRestScannerConfiguration implements BeanFactoryPostProcessor, ApplicationContextAware {
+
+ private ApplicationContext applicationContext;
+
+
+ @Override
+ public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
+ RemoteRestScanner scanner = new RemoteRestScanner((BeanDefinitionRegistry) configurableListableBeanFactory);
+ scanner.setResourceLoader(this.applicationContext);
+ scanner.scan("**.remote");
+ }
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ this.applicationContext = applicationContext;
+ }
+}
diff --git a/basic-util/src/test/java/RemoteTest.java b/basic-util/src/test/java/RemoteTest.java
index 0cef37e6..6fe9877a 100644
--- a/basic-util/src/test/java/RemoteTest.java
+++ b/basic-util/src/test/java/RemoteTest.java
@@ -1,11 +1,11 @@
-import ink.wgink.annotation.remote.RemoteServer;
-import ink.wgink.annotation.remote.method.RemoteDeleteMethod;
-import ink.wgink.annotation.remote.method.RemoteGetMethod;
-import ink.wgink.annotation.remote.method.RemotePostMethod;
-import ink.wgink.annotation.remote.method.RemotePutMethod;
-import ink.wgink.annotation.remote.params.RemoteJsonBodyParams;
-import ink.wgink.annotation.remote.params.RemotePathParams;
-import ink.wgink.annotation.remote.params.RemoteQueryParams;
+import ink.wgink.annotation.remote.rest.params.RemoteServerParams;
+import ink.wgink.annotation.remote.rest.method.RemoteDeleteMethod;
+import ink.wgink.annotation.remote.rest.method.RemoteGetMethod;
+import ink.wgink.annotation.remote.rest.method.RemotePostMethod;
+import ink.wgink.annotation.remote.rest.method.RemotePutMethod;
+import ink.wgink.annotation.remote.rest.params.RemoteJsonBodyParams;
+import ink.wgink.annotation.remote.rest.params.RemotePathParams;
+import ink.wgink.annotation.remote.rest.params.RemoteQueryParams;
import ink.wgink.pojo.dtos.user.UserDTO;
import ink.wgink.pojo.result.SuccessResult;
import ink.wgink.pojo.result.SuccessResultList;
@@ -27,25 +27,25 @@ public class RemoteTest {
public interface IDemo {
@RemoteGetMethod("/app/user-expand/get-user-release/{userId}")
- UserDTO getUser(@RemoteServer String remotePath, @RemotePathParams("userId") String userId);
+ UserDTO getUser(@RemoteServerParams String remotePath, @RemotePathParams("userId") String userId);
@RemoteGetMethod("/app/user-expand/list-user-release")
- List listUser(@RemoteServer String remotePath);
+ List listUser(@RemoteServerParams String remotePath);
@RemoteGetMethod("/app/user-expand/listpage-user-release")
- SuccessResultList> listPageUser(@RemoteServer String remotePath, @RemoteQueryParams("page") Integer page, @RemoteQueryParams("size") Integer size);
+ SuccessResultList> listPageUser(@RemoteServerParams String remotePath, @RemoteQueryParams("page") Integer page, @RemoteQueryParams("size") Integer size);
@RemotePostMethod("/app/user-expand/save-release")
- SuccessResult postRelease(@RemoteServer String remotePath, @RemoteJsonBodyParams Map params);
+ SuccessResult postRelease(@RemoteServerParams String remotePath, @RemoteJsonBodyParams Map params);
@RemotePostMethod("/app/user-expand/save-list-release")
- SuccessResult postListRelease(@RemoteServer String remotePath, @RemoteJsonBodyParams List