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> params); + SuccessResult postListRelease(@RemoteServerParams String remotePath, @RemoteJsonBodyParams List> params); @RemotePutMethod("/app/user-expand/update-release") - SuccessResult putRelease(@RemoteServer String remotePath, @RemoteJsonBodyParams Map params); + SuccessResult putRelease(@RemoteServerParams String remotePath, @RemoteJsonBodyParams Map params); @RemoteDeleteMethod("/app/user-expand/delete-release/{userIds}") - SuccessResult deleteRelease(@RemoteServer String remotePath, @RemotePathParams("userIds") String userIds); + SuccessResult deleteRelease(@RemoteServerParams String remotePath, @RemotePathParams("userIds") String userIds); } public static void main(String[] args) {