From d379296ae139c2e73f35ac60f37e1c2ee8525398 Mon Sep 17 00:00:00 2001 From: songjialin Date: Wed, 25 Nov 2020 17:04:09 +0800 Subject: [PATCH 01/10] 1.1.0 --- pom.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fc14010..8f20bdb 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.github.yungyu16.spring spring-boot-starter-proxy - 1.0.0 + 1.1.0-SNAPSHOT ${project.groupId}:${project.artifactId} 将不可实例化的Interface动态代理后注册到Spring容器以便IOC,用于便捷的生成Local Stub https://github.com/yungyu16/version-maven-plugin.git @@ -91,6 +91,11 @@ + + com.github.yungyu16.maven + version-maven-plugin + 1.0.1 + org.apache.maven.plugins From 374d70b7e32bdbe3d7a99336e74f5d48c0b9433e Mon Sep 17 00:00:00 2001 From: songjialin Date: Wed, 25 Nov 2020 17:08:54 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E4=BB=A3=E7=90=86=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 11 +++++------ .../spring/proxy/StubBeanPostProcessor.java | 1 + .../proxy/codegen/DefaultStubProxyFactory.java | 13 +++++++++++++ .../spring/proxy/{ => codegen}/StubLabel.java | 2 +- .../spring/proxy/codegen/StubProxyFactory.java | 11 +++++++++++ 5 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/github/yungyu16/spring/proxy/codegen/DefaultStubProxyFactory.java rename src/main/java/com/github/yungyu16/spring/proxy/{ => codegen}/StubLabel.java (70%) create mode 100644 src/main/java/com/github/yungyu16/spring/proxy/codegen/StubProxyFactory.java diff --git a/pom.xml b/pom.xml index 8f20bdb..2a8ee8c 100644 --- a/pom.xml +++ b/pom.xml @@ -56,18 +56,12 @@ Github Issues https://github.com/yungyu16/spring-boot-starter-proxy/issues - org.projectlombok lombok provided - - org.springframework.boot - spring-boot-starter-test - test - org.springframework.boot spring-boot-starter @@ -78,6 +72,11 @@ spring-boot-starter-logging true + + org.springframework.boot + spring-boot-starter-test + test + diff --git a/src/main/java/com/github/yungyu16/spring/proxy/StubBeanPostProcessor.java b/src/main/java/com/github/yungyu16/spring/proxy/StubBeanPostProcessor.java index 1772e46..077d3b4 100644 --- a/src/main/java/com/github/yungyu16/spring/proxy/StubBeanPostProcessor.java +++ b/src/main/java/com/github/yungyu16/spring/proxy/StubBeanPostProcessor.java @@ -1,6 +1,7 @@ package com.github.yungyu16.spring.proxy; import com.github.yungyu16.spring.proxy.annotation.ProxyStub; +import com.github.yungyu16.spring.proxy.codegen.StubLabel; import lombok.NonNull; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanCreationException; diff --git a/src/main/java/com/github/yungyu16/spring/proxy/codegen/DefaultStubProxyFactory.java b/src/main/java/com/github/yungyu16/spring/proxy/codegen/DefaultStubProxyFactory.java new file mode 100644 index 0000000..af67e7d --- /dev/null +++ b/src/main/java/com/github/yungyu16/spring/proxy/codegen/DefaultStubProxyFactory.java @@ -0,0 +1,13 @@ +package com.github.yungyu16.spring.proxy.codegen; + +import com.github.yungyu16.spring.proxy.annotation.ProxyStub; + +/** + * CreatedDate: 2020/11/25 + * Author: songjialin + */ +public class DefaultStubProxyFactory implements StubProxyFactory { + public T proxy(Class targetType, ProxyStub annotation) { + return null; + } +} diff --git a/src/main/java/com/github/yungyu16/spring/proxy/StubLabel.java b/src/main/java/com/github/yungyu16/spring/proxy/codegen/StubLabel.java similarity index 70% rename from src/main/java/com/github/yungyu16/spring/proxy/StubLabel.java rename to src/main/java/com/github/yungyu16/spring/proxy/codegen/StubLabel.java index 74c1329..be10c17 100644 --- a/src/main/java/com/github/yungyu16/spring/proxy/StubLabel.java +++ b/src/main/java/com/github/yungyu16/spring/proxy/codegen/StubLabel.java @@ -1,4 +1,4 @@ -package com.github.yungyu16.spring.proxy; +package com.github.yungyu16.spring.proxy.codegen; /** * 动态代理标记接口 diff --git a/src/main/java/com/github/yungyu16/spring/proxy/codegen/StubProxyFactory.java b/src/main/java/com/github/yungyu16/spring/proxy/codegen/StubProxyFactory.java new file mode 100644 index 0000000..a998a8e --- /dev/null +++ b/src/main/java/com/github/yungyu16/spring/proxy/codegen/StubProxyFactory.java @@ -0,0 +1,11 @@ +package com.github.yungyu16.spring.proxy.codegen; + +import com.github.yungyu16.spring.proxy.annotation.ProxyStub; + +/** + * CreatedDate: 2020/11/25 + * Author: songjialin + */ +public interface StubProxyFactory { + T proxy(Class targetType, ProxyStub annotation); +} From 0f91e5d83bd2ba27e46781711605cff2b0c84121 Mon Sep 17 00:00:00 2001 From: songjialin Date: Wed, 25 Nov 2020 17:58:21 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E4=BB=A3=E7=90=86=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../proxy/StubBeanAutoConfiguration.java | 21 -------- .../codegen/DefaultStubProxyFactory.java | 13 ----- .../proxy/codegen/StubProxyFactory.java | 11 ---- .../stub/StubBeanAutoConfiguration.java | 27 ++++++++++ .../StubBeanDefinitionRegistrar.java | 6 +-- .../spring/stub/StubBeanPostProcessor.java | 52 +++++++++++++++++++ .../spring/{proxy => stub}/StubContext.java | 3 +- .../{proxy => stub}/StubDefPostProcessor.java | 6 +-- .../{proxy => stub}/annotation/ProxyStub.java | 17 ++++-- .../annotation/ProxyStubScan.java | 4 +- .../proxy/AbstractInvocationDispatcher.java | 3 +- .../proxy/DefaultStubProxyFactory.java} | 40 ++++++-------- .../codegen => stub/proxy}/StubLabel.java | 2 +- .../spring/stub/proxy/StubProxyFactory.java | 16 ++++++ ...efinitionRegistryPostProcessorAdapter.java | 2 +- .../ClassPathStubBeanDefinitionScanner.java | 4 +- src/main/resources/META-INF/spring.factories | 2 +- .../proxy/example/HelloServiceTest.java | 28 ---------- .../proxy/example/service/HelloService1.java | 13 ----- .../spring/stub/example/HelloServiceTest.java | 36 +++++++++++++ .../example/TestApplication.java | 4 +- .../example/annotation/TestClient.java | 6 +-- .../stub/example/service/HelloService1.java | 13 +++++ .../example/service/HelloService2.java | 6 +-- .../stub/example/service/HelloService3.java | 13 +++++ .../service/InvocationDispatcherImpl1.java | 11 ++-- .../service/InvocationDispatcherImpl2.java | 11 ++-- .../example/service/StubProxyFactory3.java | 32 ++++++++++++ .../{proxy => stub}/test/package-info.java | 2 +- 29 files changed, 252 insertions(+), 152 deletions(-) delete mode 100644 src/main/java/com/github/yungyu16/spring/proxy/StubBeanAutoConfiguration.java delete mode 100644 src/main/java/com/github/yungyu16/spring/proxy/codegen/DefaultStubProxyFactory.java delete mode 100644 src/main/java/com/github/yungyu16/spring/proxy/codegen/StubProxyFactory.java create mode 100644 src/main/java/com/github/yungyu16/spring/stub/StubBeanAutoConfiguration.java rename src/main/java/com/github/yungyu16/spring/{proxy => stub}/StubBeanDefinitionRegistrar.java (91%) create mode 100644 src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java rename src/main/java/com/github/yungyu16/spring/{proxy => stub}/StubContext.java (94%) rename src/main/java/com/github/yungyu16/spring/{proxy => stub}/StubDefPostProcessor.java (89%) rename src/main/java/com/github/yungyu16/spring/{proxy => stub}/annotation/ProxyStub.java (57%) rename src/main/java/com/github/yungyu16/spring/{proxy => stub}/annotation/ProxyStubScan.java (81%) rename src/main/java/com/github/yungyu16/spring/{ => stub}/proxy/AbstractInvocationDispatcher.java (95%) rename src/main/java/com/github/yungyu16/spring/{proxy/StubBeanPostProcessor.java => stub/proxy/DefaultStubProxyFactory.java} (68%) rename src/main/java/com/github/yungyu16/spring/{proxy/codegen => stub/proxy}/StubLabel.java (70%) create mode 100644 src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyFactory.java rename src/main/java/com/github/yungyu16/spring/{proxy => stub}/support/BeanDefinitionRegistryPostProcessorAdapter.java (93%) rename src/main/java/com/github/yungyu16/spring/{proxy => stub}/support/ClassPathStubBeanDefinitionScanner.java (90%) delete mode 100644 src/test/java/com/github/yungyu16/spring/proxy/example/HelloServiceTest.java delete mode 100644 src/test/java/com/github/yungyu16/spring/proxy/example/service/HelloService1.java create mode 100644 src/test/java/com/github/yungyu16/spring/stub/example/HelloServiceTest.java rename src/test/java/com/github/yungyu16/spring/{proxy => stub}/example/TestApplication.java (75%) rename src/test/java/com/github/yungyu16/spring/{proxy => stub}/example/annotation/TestClient.java (65%) create mode 100644 src/test/java/com/github/yungyu16/spring/stub/example/service/HelloService1.java rename src/test/java/com/github/yungyu16/spring/{proxy => stub}/example/service/HelloService2.java (50%) create mode 100644 src/test/java/com/github/yungyu16/spring/stub/example/service/HelloService3.java rename src/test/java/com/github/yungyu16/spring/{proxy => stub}/example/service/InvocationDispatcherImpl1.java (58%) rename src/test/java/com/github/yungyu16/spring/{proxy => stub}/example/service/InvocationDispatcherImpl2.java (58%) create mode 100644 src/test/java/com/github/yungyu16/spring/stub/example/service/StubProxyFactory3.java rename src/test/java/com/github/yungyu16/spring/{proxy => stub}/test/package-info.java (61%) diff --git a/src/main/java/com/github/yungyu16/spring/proxy/StubBeanAutoConfiguration.java b/src/main/java/com/github/yungyu16/spring/proxy/StubBeanAutoConfiguration.java deleted file mode 100644 index 003a412..0000000 --- a/src/main/java/com/github/yungyu16/spring/proxy/StubBeanAutoConfiguration.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.github.yungyu16.spring.proxy; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -/** - * CreatedDate: 2020/11/24 - * Author: songjialin - */ -@Configuration -public class StubBeanAutoConfiguration { - @Bean - public StubDefPostProcessor stubBeanFactoryPostProcessor() { - return new StubDefPostProcessor(); - } - - @Bean - public StubBeanPostProcessor stubBeanPostProcessor() { - return new StubBeanPostProcessor(); - } -} diff --git a/src/main/java/com/github/yungyu16/spring/proxy/codegen/DefaultStubProxyFactory.java b/src/main/java/com/github/yungyu16/spring/proxy/codegen/DefaultStubProxyFactory.java deleted file mode 100644 index af67e7d..0000000 --- a/src/main/java/com/github/yungyu16/spring/proxy/codegen/DefaultStubProxyFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.github.yungyu16.spring.proxy.codegen; - -import com.github.yungyu16.spring.proxy.annotation.ProxyStub; - -/** - * CreatedDate: 2020/11/25 - * Author: songjialin - */ -public class DefaultStubProxyFactory implements StubProxyFactory { - public T proxy(Class targetType, ProxyStub annotation) { - return null; - } -} diff --git a/src/main/java/com/github/yungyu16/spring/proxy/codegen/StubProxyFactory.java b/src/main/java/com/github/yungyu16/spring/proxy/codegen/StubProxyFactory.java deleted file mode 100644 index a998a8e..0000000 --- a/src/main/java/com/github/yungyu16/spring/proxy/codegen/StubProxyFactory.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.github.yungyu16.spring.proxy.codegen; - -import com.github.yungyu16.spring.proxy.annotation.ProxyStub; - -/** - * CreatedDate: 2020/11/25 - * Author: songjialin - */ -public interface StubProxyFactory { - T proxy(Class targetType, ProxyStub annotation); -} diff --git a/src/main/java/com/github/yungyu16/spring/stub/StubBeanAutoConfiguration.java b/src/main/java/com/github/yungyu16/spring/stub/StubBeanAutoConfiguration.java new file mode 100644 index 0000000..caa9b4b --- /dev/null +++ b/src/main/java/com/github/yungyu16/spring/stub/StubBeanAutoConfiguration.java @@ -0,0 +1,27 @@ +package com.github.yungyu16.spring.stub; + +import com.github.yungyu16.spring.stub.proxy.DefaultStubProxyFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * CreatedDate: 2020/11/24 + * Author: songjialin + */ +@Configuration +public class StubBeanAutoConfiguration { + @Bean + public StubDefPostProcessor stubBeanFactoryPostProcessor() { + return new StubDefPostProcessor(); + } + + @Bean + public StubBeanPostProcessor stubBeanPostProcessor(DefaultStubProxyFactory defaultStubProxyFactory) { + return new StubBeanPostProcessor(defaultStubProxyFactory); + } + + @Bean + public DefaultStubProxyFactory defaultStubProxyFactory() { + return new DefaultStubProxyFactory(); + } +} diff --git a/src/main/java/com/github/yungyu16/spring/proxy/StubBeanDefinitionRegistrar.java b/src/main/java/com/github/yungyu16/spring/stub/StubBeanDefinitionRegistrar.java similarity index 91% rename from src/main/java/com/github/yungyu16/spring/proxy/StubBeanDefinitionRegistrar.java rename to src/main/java/com/github/yungyu16/spring/stub/StubBeanDefinitionRegistrar.java index 472ca70..c3995c2 100644 --- a/src/main/java/com/github/yungyu16/spring/proxy/StubBeanDefinitionRegistrar.java +++ b/src/main/java/com/github/yungyu16/spring/stub/StubBeanDefinitionRegistrar.java @@ -1,7 +1,7 @@ -package com.github.yungyu16.spring.proxy; +package com.github.yungyu16.spring.stub; -import com.github.yungyu16.spring.proxy.annotation.ProxyStubScan; -import com.github.yungyu16.spring.proxy.support.ClassPathStubBeanDefinitionScanner; +import com.github.yungyu16.spring.stub.annotation.ProxyStubScan; +import com.github.yungyu16.spring.stub.support.ClassPathStubBeanDefinitionScanner; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.EnvironmentAware; diff --git a/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java b/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java new file mode 100644 index 0000000..dc30f4b --- /dev/null +++ b/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java @@ -0,0 +1,52 @@ +package com.github.yungyu16.spring.stub; + +import com.github.yungyu16.spring.stub.annotation.ProxyStub; +import com.github.yungyu16.spring.stub.proxy.DefaultStubProxyFactory; +import com.github.yungyu16.spring.stub.proxy.StubProxyFactory; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.BeanCreationNotAllowedException; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter; +import org.springframework.core.annotation.AnnotatedElementUtils; + +/** + * CreatedDate: 2020/11/24 + * Author: songjialin + */ +public class StubBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter implements BeanFactoryAware { + private BeanFactory beanFactory; + private final DefaultStubProxyFactory defaultStubProxyFactory; + + public StubBeanPostProcessor(DefaultStubProxyFactory defaultStubProxyFactory) { + this.defaultStubProxyFactory = defaultStubProxyFactory; + } + + @Override + @SuppressWarnings("all") + public Object postProcessBeforeInstantiation(Class type, String name) throws BeansException { + ProxyStub proxyStub = AnnotatedElementUtils.getMergedAnnotation(type, ProxyStub.class); + if (proxyStub == null) { + return null; + } + if (!type.isInterface()) { + throw new BeanCreationNotAllowedException(name, type.getName() + " 不是Interface"); + } + StubProxyFactory stubProxyFactory = getStubProxyFactory(proxyStub); + return stubProxyFactory.proxy(type, proxyStub); + } + + private StubProxyFactory getStubProxyFactory(ProxyStub proxyStub) { + Class factoryType = proxyStub.factoryType(); + if (factoryType == StubProxyFactory.class) { + return defaultStubProxyFactory; + } + return beanFactory.getBean(factoryType); + } + + + @Override + public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + this.beanFactory = beanFactory; + } +} diff --git a/src/main/java/com/github/yungyu16/spring/proxy/StubContext.java b/src/main/java/com/github/yungyu16/spring/stub/StubContext.java similarity index 94% rename from src/main/java/com/github/yungyu16/spring/proxy/StubContext.java rename to src/main/java/com/github/yungyu16/spring/stub/StubContext.java index cde2caf..81361a5 100644 --- a/src/main/java/com/github/yungyu16/spring/proxy/StubContext.java +++ b/src/main/java/com/github/yungyu16/spring/stub/StubContext.java @@ -1,4 +1,4 @@ -package com.github.yungyu16.spring.proxy; +package com.github.yungyu16.spring.stub; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -26,5 +26,4 @@ private StubContext(@NonNull Class stubType, T annotation) { public static StubContext valueOf(Class stubType, T annotation) { return new StubContext<>(stubType, annotation); } - } diff --git a/src/main/java/com/github/yungyu16/spring/proxy/StubDefPostProcessor.java b/src/main/java/com/github/yungyu16/spring/stub/StubDefPostProcessor.java similarity index 89% rename from src/main/java/com/github/yungyu16/spring/proxy/StubDefPostProcessor.java rename to src/main/java/com/github/yungyu16/spring/stub/StubDefPostProcessor.java index 2e9f1c4..d0838c0 100644 --- a/src/main/java/com/github/yungyu16/spring/proxy/StubDefPostProcessor.java +++ b/src/main/java/com/github/yungyu16/spring/stub/StubDefPostProcessor.java @@ -1,7 +1,7 @@ -package com.github.yungyu16.spring.proxy; +package com.github.yungyu16.spring.stub; -import com.github.yungyu16.spring.proxy.support.BeanDefinitionRegistryPostProcessorAdapter; -import com.github.yungyu16.spring.proxy.support.ClassPathStubBeanDefinitionScanner; +import com.github.yungyu16.spring.stub.support.BeanDefinitionRegistryPostProcessorAdapter; +import com.github.yungyu16.spring.stub.support.ClassPathStubBeanDefinitionScanner; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; diff --git a/src/main/java/com/github/yungyu16/spring/proxy/annotation/ProxyStub.java b/src/main/java/com/github/yungyu16/spring/stub/annotation/ProxyStub.java similarity index 57% rename from src/main/java/com/github/yungyu16/spring/proxy/annotation/ProxyStub.java rename to src/main/java/com/github/yungyu16/spring/stub/annotation/ProxyStub.java index 17e0685..29d920f 100644 --- a/src/main/java/com/github/yungyu16/spring/proxy/annotation/ProxyStub.java +++ b/src/main/java/com/github/yungyu16/spring/stub/annotation/ProxyStub.java @@ -1,6 +1,7 @@ -package com.github.yungyu16.spring.proxy.annotation; +package com.github.yungyu16.spring.stub.annotation; -import com.github.yungyu16.spring.proxy.AbstractInvocationDispatcher; +import com.github.yungyu16.spring.stub.proxy.AbstractInvocationDispatcher; +import com.github.yungyu16.spring.stub.proxy.StubProxyFactory; import org.springframework.core.annotation.AliasFor; import org.springframework.stereotype.Component; @@ -24,7 +25,15 @@ String beanName() default ""; /** - * 指定动态代理调用拦截器BeanType,用于从BeanFactory中按类型获取bean + * 指定动态代理工厂,用于定制动态代理方案比如Cglib、ByteBuddy等 + * 优先使用此配置 + * + * @return + */ + Class factoryType() default StubProxyFactory.class; + + /** + * 指定JdkDynamicProxy调用拦截器BeanType,用于从BeanFactory中按类型获取bean * * @return */ @@ -32,7 +41,7 @@ Class value() default AbstractInvocationDispatcher.class; /** - * 指定动态代理调用拦截器BeanType,用于从BeanFactory中按类型获取bean + * 指定JdkDynamicProxy调用拦截器BeanType,用于从BeanFactory中按类型获取bean * * @return */ diff --git a/src/main/java/com/github/yungyu16/spring/proxy/annotation/ProxyStubScan.java b/src/main/java/com/github/yungyu16/spring/stub/annotation/ProxyStubScan.java similarity index 81% rename from src/main/java/com/github/yungyu16/spring/proxy/annotation/ProxyStubScan.java rename to src/main/java/com/github/yungyu16/spring/stub/annotation/ProxyStubScan.java index dd8f42a..1de2a29 100644 --- a/src/main/java/com/github/yungyu16/spring/proxy/annotation/ProxyStubScan.java +++ b/src/main/java/com/github/yungyu16/spring/stub/annotation/ProxyStubScan.java @@ -1,6 +1,6 @@ -package com.github.yungyu16.spring.proxy.annotation; +package com.github.yungyu16.spring.stub.annotation; -import com.github.yungyu16.spring.proxy.StubBeanDefinitionRegistrar; +import com.github.yungyu16.spring.stub.StubBeanDefinitionRegistrar; import org.springframework.context.annotation.Import; import org.springframework.core.annotation.AliasFor; diff --git a/src/main/java/com/github/yungyu16/spring/proxy/AbstractInvocationDispatcher.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/AbstractInvocationDispatcher.java similarity index 95% rename from src/main/java/com/github/yungyu16/spring/proxy/AbstractInvocationDispatcher.java rename to src/main/java/com/github/yungyu16/spring/stub/proxy/AbstractInvocationDispatcher.java index 30726f3..e1b31e3 100644 --- a/src/main/java/com/github/yungyu16/spring/proxy/AbstractInvocationDispatcher.java +++ b/src/main/java/com/github/yungyu16/spring/stub/proxy/AbstractInvocationDispatcher.java @@ -1,5 +1,6 @@ -package com.github.yungyu16.spring.proxy; +package com.github.yungyu16.spring.stub.proxy; +import com.github.yungyu16.spring.stub.StubContext; import lombok.NonNull; import java.lang.annotation.Annotation; diff --git a/src/main/java/com/github/yungyu16/spring/proxy/StubBeanPostProcessor.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java similarity index 68% rename from src/main/java/com/github/yungyu16/spring/proxy/StubBeanPostProcessor.java rename to src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java index 077d3b4..b833c91 100644 --- a/src/main/java/com/github/yungyu16/spring/proxy/StubBeanPostProcessor.java +++ b/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java @@ -1,15 +1,12 @@ -package com.github.yungyu16.spring.proxy; +package com.github.yungyu16.spring.stub.proxy; -import com.github.yungyu16.spring.proxy.annotation.ProxyStub; -import com.github.yungyu16.spring.proxy.codegen.StubLabel; +import com.github.yungyu16.spring.stub.StubContext; +import com.github.yungyu16.spring.stub.annotation.ProxyStub; import lombok.NonNull; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanCreationException; -import org.springframework.beans.factory.BeanCreationNotAllowedException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; -import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter; -import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.util.ClassUtils; import org.springframework.util.ReflectionUtils; @@ -20,27 +17,20 @@ import java.lang.reflect.Proxy; /** - * CreatedDate: 2020/11/24 + * CreatedDate: 2020/11/25 * Author: songjialin */ -public class StubBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter implements BeanFactoryAware { +public class DefaultStubProxyFactory implements StubProxyFactory, BeanFactoryAware { private BeanFactory beanFactory; + @SuppressWarnings("rawtypes,unchecked") @Override - @SuppressWarnings("all") - public Object postProcessBeforeInstantiation(Class type, String name) throws BeansException { - ProxyStub proxyStub = AnnotatedElementUtils.getMergedAnnotation(type, ProxyStub.class); - if (proxyStub == null) { - return null; - } - if (!type.isInterface()) { - throw new BeanCreationNotAllowedException(name, type.getName() + " 不是Interface"); - } - AbstractInvocationDispatcher invocationDispatcher = getInvocationDispatcher(type, proxyStub); + public T proxy(Class stubInterface, ProxyStub stubAnnotation) { + AbstractInvocationDispatcher invocationDispatcher = getInvocationDispatcher(stubInterface, stubAnnotation); Class annotationType = invocationDispatcher.getAnnotationType(); - Annotation annotation = AnnotationUtils.findAnnotation(type, annotationType); - StubContext stubContext = StubContext.valueOf(type, annotation); - return Proxy.newProxyInstance(ClassUtils.getDefaultClassLoader(), new Class[]{type, StubLabel.class}, StubInvocationHandler.newInstance(stubContext, invocationDispatcher)); + Annotation annotation = AnnotationUtils.findAnnotation(stubInterface, annotationType); + StubContext stubContext = StubContext.valueOf(stubInterface, annotation); + return (T) Proxy.newProxyInstance(ClassUtils.getDefaultClassLoader(), collectProxyInterface(stubInterface), StubInvocationHandler.newInstance(stubContext, invocationDispatcher)); } @SuppressWarnings("all") @@ -67,10 +57,6 @@ public void setBeanFactory(BeanFactory beanFactory) throws BeansException { @SuppressWarnings("rawtypes") static class StubInvocationHandler implements InvocationHandler { - public static StubInvocationHandler newInstance(@NonNull StubContext stubContext, @NonNull AbstractInvocationDispatcher dispatcher) { - return new StubInvocationHandler(stubContext, dispatcher); - } - private final StubContext stubContext; private final AbstractInvocationDispatcher dispatcher; @@ -79,6 +65,10 @@ private StubInvocationHandler(StubContext stubContext, AbstractInvocationDispatc this.dispatcher = dispatcher; } + public static StubInvocationHandler newInstance(@NonNull StubContext stubContext, @NonNull AbstractInvocationDispatcher dispatcher) { + return new StubInvocationHandler(stubContext, dispatcher); + } + @Override @SuppressWarnings("unchecked") public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { diff --git a/src/main/java/com/github/yungyu16/spring/proxy/codegen/StubLabel.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/StubLabel.java similarity index 70% rename from src/main/java/com/github/yungyu16/spring/proxy/codegen/StubLabel.java rename to src/main/java/com/github/yungyu16/spring/stub/proxy/StubLabel.java index be10c17..2201ea9 100644 --- a/src/main/java/com/github/yungyu16/spring/proxy/codegen/StubLabel.java +++ b/src/main/java/com/github/yungyu16/spring/stub/proxy/StubLabel.java @@ -1,4 +1,4 @@ -package com.github.yungyu16.spring.proxy.codegen; +package com.github.yungyu16.spring.stub.proxy; /** * 动态代理标记接口 diff --git a/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyFactory.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyFactory.java new file mode 100644 index 0000000..3456e6a --- /dev/null +++ b/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyFactory.java @@ -0,0 +1,16 @@ +package com.github.yungyu16.spring.stub.proxy; + +import com.github.yungyu16.spring.stub.annotation.ProxyStub; + +/** + * CreatedDate: 2020/11/25 + * Author: songjialin + */ +public interface StubProxyFactory { + + default Class[] collectProxyInterface(Class interfaceType) { + return new Class[]{interfaceType, StubLabel.class}; + } + + T proxy(Class stubInterface, ProxyStub stubAnnotation); +} diff --git a/src/main/java/com/github/yungyu16/spring/proxy/support/BeanDefinitionRegistryPostProcessorAdapter.java b/src/main/java/com/github/yungyu16/spring/stub/support/BeanDefinitionRegistryPostProcessorAdapter.java similarity index 93% rename from src/main/java/com/github/yungyu16/spring/proxy/support/BeanDefinitionRegistryPostProcessorAdapter.java rename to src/main/java/com/github/yungyu16/spring/stub/support/BeanDefinitionRegistryPostProcessorAdapter.java index ce9fa5a..1009fe6 100644 --- a/src/main/java/com/github/yungyu16/spring/proxy/support/BeanDefinitionRegistryPostProcessorAdapter.java +++ b/src/main/java/com/github/yungyu16/spring/stub/support/BeanDefinitionRegistryPostProcessorAdapter.java @@ -1,4 +1,4 @@ -package com.github.yungyu16.spring.proxy.support; +package com.github.yungyu16.spring.stub.support; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; diff --git a/src/main/java/com/github/yungyu16/spring/proxy/support/ClassPathStubBeanDefinitionScanner.java b/src/main/java/com/github/yungyu16/spring/stub/support/ClassPathStubBeanDefinitionScanner.java similarity index 90% rename from src/main/java/com/github/yungyu16/spring/proxy/support/ClassPathStubBeanDefinitionScanner.java rename to src/main/java/com/github/yungyu16/spring/stub/support/ClassPathStubBeanDefinitionScanner.java index b3dad16..13afc0c 100644 --- a/src/main/java/com/github/yungyu16/spring/proxy/support/ClassPathStubBeanDefinitionScanner.java +++ b/src/main/java/com/github/yungyu16/spring/stub/support/ClassPathStubBeanDefinitionScanner.java @@ -1,6 +1,6 @@ -package com.github.yungyu16.spring.proxy.support; +package com.github.yungyu16.spring.stub.support; -import com.github.yungyu16.spring.proxy.annotation.ProxyStub; +import com.github.yungyu16.spring.stub.annotation.ProxyStub; import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.annotation.ClassPathBeanDefinitionScanner; diff --git a/src/main/resources/META-INF/spring.factories b/src/main/resources/META-INF/spring.factories index e3a0b24..90d5078 100644 --- a/src/main/resources/META-INF/spring.factories +++ b/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -com.github.yungyu16.spring.proxy.StubBeanAutoConfiguration +com.github.yungyu16.spring.stub.StubBeanAutoConfiguration diff --git a/src/test/java/com/github/yungyu16/spring/proxy/example/HelloServiceTest.java b/src/test/java/com/github/yungyu16/spring/proxy/example/HelloServiceTest.java deleted file mode 100644 index 2279e61..0000000 --- a/src/test/java/com/github/yungyu16/spring/proxy/example/HelloServiceTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.github.yungyu16.spring.proxy.example; - -import com.github.yungyu16.spring.proxy.example.service.HelloService1; -import com.github.yungyu16.spring.proxy.example.service.HelloService2; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -/** - * CreatedDate: 2020/11/24 - * Author: songjialin - */ -@RunWith(SpringRunner.class) -@SpringBootTest -public class HelloServiceTest { - @Autowired - private HelloService1 helloService1; - @Autowired - private HelloService2 helloService2; - - @Test - public void testHello1() { - helloService1.hello(); - helloService2.hello(); - } -} diff --git a/src/test/java/com/github/yungyu16/spring/proxy/example/service/HelloService1.java b/src/test/java/com/github/yungyu16/spring/proxy/example/service/HelloService1.java deleted file mode 100644 index c5a27a2..0000000 --- a/src/test/java/com/github/yungyu16/spring/proxy/example/service/HelloService1.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.github.yungyu16.spring.proxy.example.service; - - -import com.github.yungyu16.spring.proxy.example.annotation.TestClient; - -/** - * CreatedDate: 2020/11/24 - * Author: songjialin - */ -@TestClient("helloService") -public interface HelloService1 { - void hello(); -} diff --git a/src/test/java/com/github/yungyu16/spring/stub/example/HelloServiceTest.java b/src/test/java/com/github/yungyu16/spring/stub/example/HelloServiceTest.java new file mode 100644 index 0000000..2ded538 --- /dev/null +++ b/src/test/java/com/github/yungyu16/spring/stub/example/HelloServiceTest.java @@ -0,0 +1,36 @@ +package com.github.yungyu16.spring.stub.example; + +import com.github.yungyu16.spring.stub.example.service.HelloService1; +import com.github.yungyu16.spring.stub.example.service.HelloService2; +import com.github.yungyu16.spring.stub.example.service.HelloService3; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * CreatedDate: 2020/11/24 + * Author: songjialin + */ +@RunWith(SpringRunner.class) +@SpringBootTest +public class HelloServiceTest { + @Autowired + private HelloService1 helloService1; + @Autowired + private HelloService2 helloService2; + @Autowired + private HelloService3 helloService3; + + @Test + public void testHello1() { + String hello1 = helloService1.hello(); + String hello2 = helloService2.hello(); + String hello3 = helloService3.hello(); + Assert.assertSame("InvocationDispatcherImpl1", hello1); + Assert.assertSame("InvocationDispatcherImpl2", hello2); + Assert.assertSame("StubProxyFactory3", hello3); + } +} diff --git a/src/test/java/com/github/yungyu16/spring/proxy/example/TestApplication.java b/src/test/java/com/github/yungyu16/spring/stub/example/TestApplication.java similarity index 75% rename from src/test/java/com/github/yungyu16/spring/proxy/example/TestApplication.java rename to src/test/java/com/github/yungyu16/spring/stub/example/TestApplication.java index a77c920..5bbd838 100644 --- a/src/test/java/com/github/yungyu16/spring/proxy/example/TestApplication.java +++ b/src/test/java/com/github/yungyu16/spring/stub/example/TestApplication.java @@ -1,6 +1,6 @@ -package com.github.yungyu16.spring.proxy.example; +package com.github.yungyu16.spring.stub.example; -import com.github.yungyu16.spring.proxy.annotation.ProxyStubScan; +import com.github.yungyu16.spring.stub.annotation.ProxyStubScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/src/test/java/com/github/yungyu16/spring/proxy/example/annotation/TestClient.java b/src/test/java/com/github/yungyu16/spring/stub/example/annotation/TestClient.java similarity index 65% rename from src/test/java/com/github/yungyu16/spring/proxy/example/annotation/TestClient.java rename to src/test/java/com/github/yungyu16/spring/stub/example/annotation/TestClient.java index 2b8a464..73dfb0e 100644 --- a/src/test/java/com/github/yungyu16/spring/proxy/example/annotation/TestClient.java +++ b/src/test/java/com/github/yungyu16/spring/stub/example/annotation/TestClient.java @@ -1,7 +1,7 @@ -package com.github.yungyu16.spring.proxy.example.annotation; +package com.github.yungyu16.spring.stub.example.annotation; -import com.github.yungyu16.spring.proxy.annotation.ProxyStub; -import com.github.yungyu16.spring.proxy.example.service.InvocationDispatcherImpl1; +import com.github.yungyu16.spring.stub.annotation.ProxyStub; +import com.github.yungyu16.spring.stub.example.service.InvocationDispatcherImpl1; import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; diff --git a/src/test/java/com/github/yungyu16/spring/stub/example/service/HelloService1.java b/src/test/java/com/github/yungyu16/spring/stub/example/service/HelloService1.java new file mode 100644 index 0000000..6719084 --- /dev/null +++ b/src/test/java/com/github/yungyu16/spring/stub/example/service/HelloService1.java @@ -0,0 +1,13 @@ +package com.github.yungyu16.spring.stub.example.service; + + +import com.github.yungyu16.spring.stub.example.annotation.TestClient; + +/** + * CreatedDate: 2020/11/24 + * Author: songjialin + */ +@TestClient("helloService") +public interface HelloService1 { + String hello(); +} diff --git a/src/test/java/com/github/yungyu16/spring/proxy/example/service/HelloService2.java b/src/test/java/com/github/yungyu16/spring/stub/example/service/HelloService2.java similarity index 50% rename from src/test/java/com/github/yungyu16/spring/proxy/example/service/HelloService2.java rename to src/test/java/com/github/yungyu16/spring/stub/example/service/HelloService2.java index 014ce2c..04cd784 100644 --- a/src/test/java/com/github/yungyu16/spring/proxy/example/service/HelloService2.java +++ b/src/test/java/com/github/yungyu16/spring/stub/example/service/HelloService2.java @@ -1,7 +1,7 @@ -package com.github.yungyu16.spring.proxy.example.service; +package com.github.yungyu16.spring.stub.example.service; -import com.github.yungyu16.spring.proxy.annotation.ProxyStub; +import com.github.yungyu16.spring.stub.annotation.ProxyStub; /** * CreatedDate: 2020/11/24 @@ -9,5 +9,5 @@ */ @ProxyStub(InvocationDispatcherImpl2.class) public interface HelloService2 { - void hello(); + String hello(); } diff --git a/src/test/java/com/github/yungyu16/spring/stub/example/service/HelloService3.java b/src/test/java/com/github/yungyu16/spring/stub/example/service/HelloService3.java new file mode 100644 index 0000000..90ebcd1 --- /dev/null +++ b/src/test/java/com/github/yungyu16/spring/stub/example/service/HelloService3.java @@ -0,0 +1,13 @@ +package com.github.yungyu16.spring.stub.example.service; + + +import com.github.yungyu16.spring.stub.annotation.ProxyStub; + +/** + * CreatedDate: 2020/11/24 + * Author: songjialin + */ +@ProxyStub(factoryType = StubProxyFactory3.class) +public interface HelloService3 { + String hello(); +} diff --git a/src/test/java/com/github/yungyu16/spring/proxy/example/service/InvocationDispatcherImpl1.java b/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl1.java similarity index 58% rename from src/test/java/com/github/yungyu16/spring/proxy/example/service/InvocationDispatcherImpl1.java rename to src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl1.java index cdef83e..9d22a6c 100644 --- a/src/test/java/com/github/yungyu16/spring/proxy/example/service/InvocationDispatcherImpl1.java +++ b/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl1.java @@ -1,8 +1,8 @@ -package com.github.yungyu16.spring.proxy.example.service; +package com.github.yungyu16.spring.stub.example.service; -import com.github.yungyu16.spring.proxy.AbstractInvocationDispatcher; -import com.github.yungyu16.spring.proxy.StubContext; -import com.github.yungyu16.spring.proxy.example.annotation.TestClient; +import com.github.yungyu16.spring.stub.StubContext; +import com.github.yungyu16.spring.stub.example.annotation.TestClient; +import com.github.yungyu16.spring.stub.proxy.AbstractInvocationDispatcher; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @@ -15,8 +15,7 @@ public class InvocationDispatcherImpl1 extends AbstractInvocationDispatcher { @Override protected Object invoke(StubContext stubContext, Object proxy, Method method, Object[] args) throws Throwable { - System.out.println(stubContext.getAnnotation()); System.out.println("InvocationDispatcherImpl1"); - return null; + return "InvocationDispatcherImpl1"; } } diff --git a/src/test/java/com/github/yungyu16/spring/proxy/example/service/InvocationDispatcherImpl2.java b/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl2.java similarity index 58% rename from src/test/java/com/github/yungyu16/spring/proxy/example/service/InvocationDispatcherImpl2.java rename to src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl2.java index ebe67f1..f8db8cf 100644 --- a/src/test/java/com/github/yungyu16/spring/proxy/example/service/InvocationDispatcherImpl2.java +++ b/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl2.java @@ -1,8 +1,8 @@ -package com.github.yungyu16.spring.proxy.example.service; +package com.github.yungyu16.spring.stub.example.service; -import com.github.yungyu16.spring.proxy.AbstractInvocationDispatcher; -import com.github.yungyu16.spring.proxy.StubContext; -import com.github.yungyu16.spring.proxy.annotation.ProxyStub; +import com.github.yungyu16.spring.stub.StubContext; +import com.github.yungyu16.spring.stub.annotation.ProxyStub; +import com.github.yungyu16.spring.stub.proxy.AbstractInvocationDispatcher; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @@ -15,8 +15,7 @@ public class InvocationDispatcherImpl2 extends AbstractInvocationDispatcher { @Override protected Object invoke(StubContext stubContext, Object proxy, Method method, Object[] args) throws Throwable { - System.out.println(stubContext.getAnnotation()); System.out.println("InvocationDispatcherImpl2"); - return null; + return "InvocationDispatcherImpl2"; } } diff --git a/src/test/java/com/github/yungyu16/spring/stub/example/service/StubProxyFactory3.java b/src/test/java/com/github/yungyu16/spring/stub/example/service/StubProxyFactory3.java new file mode 100644 index 0000000..c0ee872 --- /dev/null +++ b/src/test/java/com/github/yungyu16/spring/stub/example/service/StubProxyFactory3.java @@ -0,0 +1,32 @@ +package com.github.yungyu16.spring.stub.example.service; + +import com.github.yungyu16.spring.stub.annotation.ProxyStub; +import com.github.yungyu16.spring.stub.proxy.StubProxyFactory; +import org.springframework.stereotype.Component; +import org.springframework.util.ClassUtils; +import org.springframework.util.ReflectionUtils; + +import java.lang.reflect.Proxy; + +/** + * CreatedDate: 2020/11/25 + * Author: songjialin + */ +@Component +public class StubProxyFactory3 implements StubProxyFactory { + @SuppressWarnings("unchecked") + @Override + public T proxy(Class stubInterface, ProxyStub stubAnnotation) { + return (T) Proxy.newProxyInstance(ClassUtils.getDefaultClassLoader(), collectProxyInterface(stubInterface), (proxy, method, args) -> { + if (ReflectionUtils.isToStringMethod(method)) { + return "ProxyStub:" + ClassUtils.classNamesToString(stubInterface) + ":" + stubAnnotation; + } + if (ReflectionUtils.isEqualsMethod(method) + || ReflectionUtils.isHashCodeMethod(method)) { + return method.invoke(this, args); + } + System.out.println("StubProxyFactory3"); + return "StubProxyFactory3"; + }); + } +} diff --git a/src/test/java/com/github/yungyu16/spring/proxy/test/package-info.java b/src/test/java/com/github/yungyu16/spring/stub/test/package-info.java similarity index 61% rename from src/test/java/com/github/yungyu16/spring/proxy/test/package-info.java rename to src/test/java/com/github/yungyu16/spring/stub/test/package-info.java index de0a7c6..43b2d40 100644 --- a/src/test/java/com/github/yungyu16/spring/proxy/test/package-info.java +++ b/src/test/java/com/github/yungyu16/spring/stub/test/package-info.java @@ -2,4 +2,4 @@ * @author Yungyu * @description Created by Yungyu on 2020/11/24. */ -package com.github.yungyu16.spring.proxy.test; \ No newline at end of file +package com.github.yungyu16.spring.stub.test; From 6d44f7fac3112e12b0983574d4bb9636308afcce Mon Sep 17 00:00:00 2001 From: songjialin Date: Wed, 25 Nov 2020 17:59:57 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E4=BB=A3=E7=90=86=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++---- .../proxy/AbstractInvocationDispatcher.java | 3 +-- .../stub/proxy/DefaultStubProxyFactory.java | 19 +++++++++---------- .../StubProxyContext.java} | 10 +++++----- .../service/InvocationDispatcherImpl1.java | 4 ++-- .../service/InvocationDispatcherImpl2.java | 4 ++-- 6 files changed, 23 insertions(+), 25 deletions(-) rename src/main/java/com/github/yungyu16/spring/stub/{StubContext.java => proxy/StubProxyContext.java} (54%) diff --git a/README.md b/README.md index c2be2a6..0295a07 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,8 @@ @Component public class InvocationDispatcherImpl extends AbstractInvocationDispatcher { @Override - protected Object invoke(StubContext stubContext, Object proxy, Method method, Object[] args) throws Throwable { - System.out.println(stubContext.getAnnotation()); + protected Object invoke(StubContext stubProxyContext, Object proxy, Method method, Object[] args) throws Throwable { + System.out.println(stubProxyContext.getAnnotation()); System.out.println("InvocationDispatcherImpl"); return null; } @@ -75,8 +75,8 @@ public class HelloServiceTest { @Component public class InvocationDispatcherImpl extends AbstractInvocationDispatcher { @Override - protected Object invoke(StubContext stubContext, Object proxy, Method method, Object[] args) throws Throwable { - System.out.println(stubContext.getAnnotation()); + protected Object invoke(StubContext stubProxyContext, Object proxy, Method method, Object[] args) throws Throwable { + System.out.println(stubProxyContext.getAnnotation()); System.out.println("InvocationDispatcherImpl"); return null; } diff --git a/src/main/java/com/github/yungyu16/spring/stub/proxy/AbstractInvocationDispatcher.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/AbstractInvocationDispatcher.java index e1b31e3..a327c60 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/proxy/AbstractInvocationDispatcher.java +++ b/src/main/java/com/github/yungyu16/spring/stub/proxy/AbstractInvocationDispatcher.java @@ -1,6 +1,5 @@ package com.github.yungyu16.spring.stub.proxy; -import com.github.yungyu16.spring.stub.StubContext; import lombok.NonNull; import java.lang.annotation.Annotation; @@ -52,7 +51,7 @@ Class getAnnotationType() { return (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } - protected Object invoke(StubContext stubContext, Object proxy, Method method, Object[] args) throws Throwable { + protected Object invoke(StubProxyContext stubProxyContext, Object proxy, Method method, Object[] args) throws Throwable { return invoke(proxy, method, args); } diff --git a/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java index b833c91..69e0af2 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java +++ b/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java @@ -1,6 +1,5 @@ package com.github.yungyu16.spring.stub.proxy; -import com.github.yungyu16.spring.stub.StubContext; import com.github.yungyu16.spring.stub.annotation.ProxyStub; import lombok.NonNull; import org.springframework.beans.BeansException; @@ -29,8 +28,8 @@ public T proxy(Class stubInterface, ProxyStub stubAnnotation) { AbstractInvocationDispatcher invocationDispatcher = getInvocationDispatcher(stubInterface, stubAnnotation); Class annotationType = invocationDispatcher.getAnnotationType(); Annotation annotation = AnnotationUtils.findAnnotation(stubInterface, annotationType); - StubContext stubContext = StubContext.valueOf(stubInterface, annotation); - return (T) Proxy.newProxyInstance(ClassUtils.getDefaultClassLoader(), collectProxyInterface(stubInterface), StubInvocationHandler.newInstance(stubContext, invocationDispatcher)); + StubProxyContext stubProxyContext = StubProxyContext.valueOf(stubInterface, annotation); + return (T) Proxy.newProxyInstance(ClassUtils.getDefaultClassLoader(), collectProxyInterface(stubInterface), StubInvocationHandler.newInstance(stubProxyContext, invocationDispatcher)); } @SuppressWarnings("all") @@ -57,29 +56,29 @@ public void setBeanFactory(BeanFactory beanFactory) throws BeansException { @SuppressWarnings("rawtypes") static class StubInvocationHandler implements InvocationHandler { - private final StubContext stubContext; + private final StubProxyContext stubProxyContext; private final AbstractInvocationDispatcher dispatcher; - private StubInvocationHandler(StubContext stubContext, AbstractInvocationDispatcher dispatcher) { - this.stubContext = stubContext; + private StubInvocationHandler(StubProxyContext stubProxyContext, AbstractInvocationDispatcher dispatcher) { + this.stubProxyContext = stubProxyContext; this.dispatcher = dispatcher; } - public static StubInvocationHandler newInstance(@NonNull StubContext stubContext, @NonNull AbstractInvocationDispatcher dispatcher) { - return new StubInvocationHandler(stubContext, dispatcher); + public static StubInvocationHandler newInstance(@NonNull StubProxyContext stubProxyContext, @NonNull AbstractInvocationDispatcher dispatcher) { + return new StubInvocationHandler(stubProxyContext, dispatcher); } @Override @SuppressWarnings("unchecked") public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (ReflectionUtils.isToStringMethod(method)) { - return "ProxyStub:" + ClassUtils.classNamesToString(stubContext.getStubType()) + ":" + stubContext.getAnnotation(); + return "ProxyStub:" + ClassUtils.classNamesToString(stubProxyContext.getStubType()) + ":" + stubProxyContext.getAnnotation(); } if (ReflectionUtils.isEqualsMethod(method) || ReflectionUtils.isHashCodeMethod(method)) { return method.invoke(this, args); } - return dispatcher.invoke(stubContext, proxy, method, args); + return dispatcher.invoke(stubProxyContext, proxy, method, args); } } } diff --git a/src/main/java/com/github/yungyu16/spring/stub/StubContext.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyContext.java similarity index 54% rename from src/main/java/com/github/yungyu16/spring/stub/StubContext.java rename to src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyContext.java index 81361a5..bcf462a 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/StubContext.java +++ b/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyContext.java @@ -1,4 +1,4 @@ -package com.github.yungyu16.spring.stub; +package com.github.yungyu16.spring.stub.proxy; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -14,16 +14,16 @@ @Getter @EqualsAndHashCode @ToString -public class StubContext { +public class StubProxyContext { private final T annotation; private final Class stubType; - private StubContext(@NonNull Class stubType, T annotation) { + private StubProxyContext(@NonNull Class stubType, T annotation) { this.annotation = annotation; this.stubType = stubType; } - public static StubContext valueOf(Class stubType, T annotation) { - return new StubContext<>(stubType, annotation); + public static StubProxyContext valueOf(Class stubType, T annotation) { + return new StubProxyContext<>(stubType, annotation); } } diff --git a/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl1.java b/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl1.java index 9d22a6c..c37921f 100644 --- a/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl1.java +++ b/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl1.java @@ -1,8 +1,8 @@ package com.github.yungyu16.spring.stub.example.service; -import com.github.yungyu16.spring.stub.StubContext; import com.github.yungyu16.spring.stub.example.annotation.TestClient; import com.github.yungyu16.spring.stub.proxy.AbstractInvocationDispatcher; +import com.github.yungyu16.spring.stub.proxy.StubProxyContext; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @@ -14,7 +14,7 @@ @Component public class InvocationDispatcherImpl1 extends AbstractInvocationDispatcher { @Override - protected Object invoke(StubContext stubContext, Object proxy, Method method, Object[] args) throws Throwable { + protected Object invoke(StubProxyContext stubProxyContext, Object proxy, Method method, Object[] args) throws Throwable { System.out.println("InvocationDispatcherImpl1"); return "InvocationDispatcherImpl1"; } diff --git a/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl2.java b/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl2.java index f8db8cf..5791ead 100644 --- a/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl2.java +++ b/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl2.java @@ -1,8 +1,8 @@ package com.github.yungyu16.spring.stub.example.service; -import com.github.yungyu16.spring.stub.StubContext; import com.github.yungyu16.spring.stub.annotation.ProxyStub; import com.github.yungyu16.spring.stub.proxy.AbstractInvocationDispatcher; +import com.github.yungyu16.spring.stub.proxy.StubProxyContext; import org.springframework.stereotype.Component; import java.lang.reflect.Method; @@ -14,7 +14,7 @@ @Component public class InvocationDispatcherImpl2 extends AbstractInvocationDispatcher { @Override - protected Object invoke(StubContext stubContext, Object proxy, Method method, Object[] args) throws Throwable { + protected Object invoke(StubProxyContext stubProxyContext, Object proxy, Method method, Object[] args) throws Throwable { System.out.println("InvocationDispatcherImpl2"); return "InvocationDispatcherImpl2"; } From b1f64f0d09c10bbbcf630d062fbd36aed1476dbd Mon Sep 17 00:00:00 2001 From: songjialin Date: Wed, 25 Nov 2020 18:17:55 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E4=BB=A3=E7=90=86=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../proxy/AbstractInvocationDispatcher.java | 20 +++++++++++++ .../stub/proxy/DefaultStubProxyFactory.java | 22 ++++++-------- .../spring/stub/proxy/StubProxyContext.java | 29 ------------------- .../service/InvocationDispatcherImpl1.java | 1 - .../service/InvocationDispatcherImpl2.java | 1 - 5 files changed, 29 insertions(+), 44 deletions(-) delete mode 100644 src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyContext.java diff --git a/src/main/java/com/github/yungyu16/spring/stub/proxy/AbstractInvocationDispatcher.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/AbstractInvocationDispatcher.java index a327c60..44116ca 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/proxy/AbstractInvocationDispatcher.java +++ b/src/main/java/com/github/yungyu16/spring/stub/proxy/AbstractInvocationDispatcher.java @@ -1,6 +1,9 @@ package com.github.yungyu16.spring.stub.proxy; +import lombok.EqualsAndHashCode; +import lombok.Getter; import lombok.NonNull; +import lombok.ToString; import java.lang.annotation.Annotation; import java.lang.reflect.Method; @@ -58,5 +61,22 @@ protected Object invoke(StubProxyContext stubProxyContext, Obje protected Object invoke(Object proxy, Method method, Object[] args) throws Throwable { throw new UnsupportedOperationException(); } + + @Getter + @EqualsAndHashCode + @ToString + protected static class StubProxyContext { + private final T annotation; + private final Class stubType; + + private StubProxyContext(@NonNull Class stubType, T annotation) { + this.annotation = annotation; + this.stubType = stubType; + } + + public static StubProxyContext valueOf(Class stubType, T annotation) { + return new StubProxyContext<>(stubType, annotation); + } + } } diff --git a/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java index 69e0af2..fc712b5 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java +++ b/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java @@ -28,23 +28,19 @@ public T proxy(Class stubInterface, ProxyStub stubAnnotation) { AbstractInvocationDispatcher invocationDispatcher = getInvocationDispatcher(stubInterface, stubAnnotation); Class annotationType = invocationDispatcher.getAnnotationType(); Annotation annotation = AnnotationUtils.findAnnotation(stubInterface, annotationType); - StubProxyContext stubProxyContext = StubProxyContext.valueOf(stubInterface, annotation); + AbstractInvocationDispatcher.StubProxyContext stubProxyContext = AbstractInvocationDispatcher.StubProxyContext.valueOf(stubInterface, annotation); return (T) Proxy.newProxyInstance(ClassUtils.getDefaultClassLoader(), collectProxyInterface(stubInterface), StubInvocationHandler.newInstance(stubProxyContext, invocationDispatcher)); } - @SuppressWarnings("all") + @SuppressWarnings("rawtypes") private AbstractInvocationDispatcher getInvocationDispatcher(@NonNull Class type, @NonNull ProxyStub proxyStub) { - Class beanType = proxyStub.dispatcherType(); - - Object handler = null; - if (beanType != AbstractInvocationDispatcher.class) { - handler = beanFactory.getBean(beanType); + Class dispatcherType = proxyStub.dispatcherType(); + Object handler; + if (dispatcherType != AbstractInvocationDispatcher.class) { + handler = beanFactory.getBean(dispatcherType); } else { throw new BeanCreationException(type.getName() + " 没有指定InvocationDispatcher"); } - if (!(handler instanceof AbstractInvocationDispatcher)) { - throw new BeanCreationException(type.getName() + " InvocationDispatcher类型错误"); - } return (AbstractInvocationDispatcher) handler; } @@ -56,15 +52,15 @@ public void setBeanFactory(BeanFactory beanFactory) throws BeansException { @SuppressWarnings("rawtypes") static class StubInvocationHandler implements InvocationHandler { - private final StubProxyContext stubProxyContext; + private final AbstractInvocationDispatcher.StubProxyContext stubProxyContext; private final AbstractInvocationDispatcher dispatcher; - private StubInvocationHandler(StubProxyContext stubProxyContext, AbstractInvocationDispatcher dispatcher) { + private StubInvocationHandler(AbstractInvocationDispatcher.StubProxyContext stubProxyContext, AbstractInvocationDispatcher dispatcher) { this.stubProxyContext = stubProxyContext; this.dispatcher = dispatcher; } - public static StubInvocationHandler newInstance(@NonNull StubProxyContext stubProxyContext, @NonNull AbstractInvocationDispatcher dispatcher) { + public static StubInvocationHandler newInstance(@NonNull AbstractInvocationDispatcher.StubProxyContext stubProxyContext, @NonNull AbstractInvocationDispatcher dispatcher) { return new StubInvocationHandler(stubProxyContext, dispatcher); } diff --git a/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyContext.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyContext.java deleted file mode 100644 index bcf462a..0000000 --- a/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyContext.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.github.yungyu16.spring.stub.proxy; - -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NonNull; -import lombok.ToString; - -import java.lang.annotation.Annotation; - -/** - * @author Yungyu - * @description Created by Yungyu on 2020/11/24. - */ -@Getter -@EqualsAndHashCode -@ToString -public class StubProxyContext { - private final T annotation; - private final Class stubType; - - private StubProxyContext(@NonNull Class stubType, T annotation) { - this.annotation = annotation; - this.stubType = stubType; - } - - public static StubProxyContext valueOf(Class stubType, T annotation) { - return new StubProxyContext<>(stubType, annotation); - } -} diff --git a/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl1.java b/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl1.java index c37921f..98266eb 100644 --- a/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl1.java +++ b/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl1.java @@ -2,7 +2,6 @@ import com.github.yungyu16.spring.stub.example.annotation.TestClient; import com.github.yungyu16.spring.stub.proxy.AbstractInvocationDispatcher; -import com.github.yungyu16.spring.stub.proxy.StubProxyContext; import org.springframework.stereotype.Component; import java.lang.reflect.Method; diff --git a/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl2.java b/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl2.java index 5791ead..5c24aac 100644 --- a/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl2.java +++ b/src/test/java/com/github/yungyu16/spring/stub/example/service/InvocationDispatcherImpl2.java @@ -2,7 +2,6 @@ import com.github.yungyu16.spring.stub.annotation.ProxyStub; import com.github.yungyu16.spring.stub.proxy.AbstractInvocationDispatcher; -import com.github.yungyu16.spring.stub.proxy.StubProxyContext; import org.springframework.stereotype.Component; import java.lang.reflect.Method; From 7687edc17aa2f6db14609ba9c34be3000ea9b6a2 Mon Sep 17 00:00:00 2001 From: songjialin Date: Wed, 25 Nov 2020 18:19:39 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E4=BB=A3=E7=90=86=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/github/yungyu16/spring/stub/StubBeanPostProcessor.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java b/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java index dc30f4b..4f78ae1 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java +++ b/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java @@ -44,7 +44,6 @@ private StubProxyFactory getStubProxyFactory(ProxyStub proxyStub) { return beanFactory.getBean(factoryType); } - @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; From 15b3773bab6355b21b23ec0e4297998a88772b22 Mon Sep 17 00:00:00 2001 From: songjialin Date: Wed, 25 Nov 2020 18:23:06 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E4=BB=A3=E7=90=86=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yungyu16/spring/stub/StubBeanAutoConfiguration.java | 4 ++-- .../yungyu16/spring/stub/StubBeanPostProcessor.java | 9 --------- .../yungyu16/spring/stub/annotation/ProxyStub.java | 5 +++-- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/github/yungyu16/spring/stub/StubBeanAutoConfiguration.java b/src/main/java/com/github/yungyu16/spring/stub/StubBeanAutoConfiguration.java index caa9b4b..4a841aa 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/StubBeanAutoConfiguration.java +++ b/src/main/java/com/github/yungyu16/spring/stub/StubBeanAutoConfiguration.java @@ -16,8 +16,8 @@ public StubDefPostProcessor stubBeanFactoryPostProcessor() { } @Bean - public StubBeanPostProcessor stubBeanPostProcessor(DefaultStubProxyFactory defaultStubProxyFactory) { - return new StubBeanPostProcessor(defaultStubProxyFactory); + public StubBeanPostProcessor stubBeanPostProcessor() { + return new StubBeanPostProcessor(); } @Bean diff --git a/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java b/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java index 4f78ae1..0848ae5 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java +++ b/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java @@ -1,7 +1,6 @@ package com.github.yungyu16.spring.stub; import com.github.yungyu16.spring.stub.annotation.ProxyStub; -import com.github.yungyu16.spring.stub.proxy.DefaultStubProxyFactory; import com.github.yungyu16.spring.stub.proxy.StubProxyFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanCreationNotAllowedException; @@ -16,11 +15,6 @@ */ public class StubBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter implements BeanFactoryAware { private BeanFactory beanFactory; - private final DefaultStubProxyFactory defaultStubProxyFactory; - - public StubBeanPostProcessor(DefaultStubProxyFactory defaultStubProxyFactory) { - this.defaultStubProxyFactory = defaultStubProxyFactory; - } @Override @SuppressWarnings("all") @@ -38,9 +32,6 @@ public Object postProcessBeforeInstantiation(Class type, String name) throws private StubProxyFactory getStubProxyFactory(ProxyStub proxyStub) { Class factoryType = proxyStub.factoryType(); - if (factoryType == StubProxyFactory.class) { - return defaultStubProxyFactory; - } return beanFactory.getBean(factoryType); } diff --git a/src/main/java/com/github/yungyu16/spring/stub/annotation/ProxyStub.java b/src/main/java/com/github/yungyu16/spring/stub/annotation/ProxyStub.java index 29d920f..446c78f 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/annotation/ProxyStub.java +++ b/src/main/java/com/github/yungyu16/spring/stub/annotation/ProxyStub.java @@ -1,6 +1,7 @@ package com.github.yungyu16.spring.stub.annotation; import com.github.yungyu16.spring.stub.proxy.AbstractInvocationDispatcher; +import com.github.yungyu16.spring.stub.proxy.DefaultStubProxyFactory; import com.github.yungyu16.spring.stub.proxy.StubProxyFactory; import org.springframework.core.annotation.AliasFor; import org.springframework.stereotype.Component; @@ -26,11 +27,11 @@ /** * 指定动态代理工厂,用于定制动态代理方案比如Cglib、ByteBuddy等 - * 优先使用此配置 + * 默认使用基于JdkDynamicProxy代理并使用AbstractInvocationDispatcher拦截方法调用 * * @return */ - Class factoryType() default StubProxyFactory.class; + Class factoryType() default DefaultStubProxyFactory.class; /** * 指定JdkDynamicProxy调用拦截器BeanType,用于从BeanFactory中按类型获取bean From 5e6539c7392204e52aa1216bce42547cc8b7d168 Mon Sep 17 00:00:00 2001 From: songjialin Date: Wed, 25 Nov 2020 18:25:20 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E4=BB=A3=E7=90=86=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 2a8ee8c..1e5c331 100644 --- a/pom.xml +++ b/pom.xml @@ -5,8 +5,8 @@ com.github.yungyu16.spring spring-boot-starter-proxy - 1.1.0-SNAPSHOT - ${project.groupId}:${project.artifactId} + 1.1.0 + ${project.artifactId} 将不可实例化的Interface动态代理后注册到Spring容器以便IOC,用于便捷的生成Local Stub https://github.com/yungyu16/version-maven-plugin.git From 2f16c6c0a9472dcd404497e5567f24fd3416caa3 Mon Sep 17 00:00:00 2001 From: songjialin Date: Wed, 25 Nov 2020 18:30:02 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E4=BB=A3=E7=90=86=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java index fc712b5..25a1103 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java +++ b/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java @@ -20,6 +20,7 @@ * Author: songjialin */ public class DefaultStubProxyFactory implements StubProxyFactory, BeanFactoryAware { + private BeanFactory beanFactory; @SuppressWarnings("rawtypes,unchecked") From d53a1f4eb5e8a6177336cf79716ae0e7f10ffa50 Mon Sep 17 00:00:00 2001 From: songjialin Date: Wed, 25 Nov 2020 18:36:03 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E4=BB=A3=E7=90=86=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../github/yungyu16/spring/stub/StubBeanPostProcessor.java | 2 +- .../yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java | 2 +- .../github/yungyu16/spring/stub/proxy/StubProxyFactory.java | 4 ++-- .../spring/stub/proxy/{StubLabel.java => StubProxyLabel.java} | 2 +- .../spring/stub/example/service/StubProxyFactory3.java | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) rename src/main/java/com/github/yungyu16/spring/stub/proxy/{StubLabel.java => StubProxyLabel.java} (79%) diff --git a/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java b/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java index 0848ae5..d643114 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java +++ b/src/main/java/com/github/yungyu16/spring/stub/StubBeanPostProcessor.java @@ -27,7 +27,7 @@ public Object postProcessBeforeInstantiation(Class type, String name) throws throw new BeanCreationNotAllowedException(name, type.getName() + " 不是Interface"); } StubProxyFactory stubProxyFactory = getStubProxyFactory(proxyStub); - return stubProxyFactory.proxy(type, proxyStub); + return stubProxyFactory.createProxy(type, proxyStub); } private StubProxyFactory getStubProxyFactory(ProxyStub proxyStub) { diff --git a/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java index 25a1103..aed4f62 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java +++ b/src/main/java/com/github/yungyu16/spring/stub/proxy/DefaultStubProxyFactory.java @@ -25,7 +25,7 @@ public class DefaultStubProxyFactory implements StubProxyFactory, BeanFactoryAwa @SuppressWarnings("rawtypes,unchecked") @Override - public T proxy(Class stubInterface, ProxyStub stubAnnotation) { + public T createProxy(Class stubInterface, ProxyStub stubAnnotation) { AbstractInvocationDispatcher invocationDispatcher = getInvocationDispatcher(stubInterface, stubAnnotation); Class annotationType = invocationDispatcher.getAnnotationType(); Annotation annotation = AnnotationUtils.findAnnotation(stubInterface, annotationType); diff --git a/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyFactory.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyFactory.java index 3456e6a..1b6f069 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyFactory.java +++ b/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyFactory.java @@ -9,8 +9,8 @@ public interface StubProxyFactory { default Class[] collectProxyInterface(Class interfaceType) { - return new Class[]{interfaceType, StubLabel.class}; + return new Class[]{interfaceType, StubProxyLabel.class}; } - T proxy(Class stubInterface, ProxyStub stubAnnotation); + T createProxy(Class stubInterface, ProxyStub stubAnnotation); } diff --git a/src/main/java/com/github/yungyu16/spring/stub/proxy/StubLabel.java b/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyLabel.java similarity index 79% rename from src/main/java/com/github/yungyu16/spring/stub/proxy/StubLabel.java rename to src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyLabel.java index 2201ea9..2d0a0a7 100644 --- a/src/main/java/com/github/yungyu16/spring/stub/proxy/StubLabel.java +++ b/src/main/java/com/github/yungyu16/spring/stub/proxy/StubProxyLabel.java @@ -5,5 +5,5 @@ * CreatedDate: 2020/11/24 * Author: songjialin */ -public interface StubLabel { +public interface StubProxyLabel { } diff --git a/src/test/java/com/github/yungyu16/spring/stub/example/service/StubProxyFactory3.java b/src/test/java/com/github/yungyu16/spring/stub/example/service/StubProxyFactory3.java index c0ee872..545aca0 100644 --- a/src/test/java/com/github/yungyu16/spring/stub/example/service/StubProxyFactory3.java +++ b/src/test/java/com/github/yungyu16/spring/stub/example/service/StubProxyFactory3.java @@ -16,7 +16,7 @@ public class StubProxyFactory3 implements StubProxyFactory { @SuppressWarnings("unchecked") @Override - public T proxy(Class stubInterface, ProxyStub stubAnnotation) { + public T createProxy(Class stubInterface, ProxyStub stubAnnotation) { return (T) Proxy.newProxyInstance(ClassUtils.getDefaultClassLoader(), collectProxyInterface(stubInterface), (proxy, method, args) -> { if (ReflectionUtils.isToStringMethod(method)) { return "ProxyStub:" + ClassUtils.classNamesToString(stubInterface) + ":" + stubAnnotation;