Skip to content

Commit 20fabd3

Browse files
authored
Merge pull request #20 from codingapi/dev
Dev
2 parents 730daaa + 9c8d73f commit 20fabd3

File tree

8 files changed

+61
-23
lines changed

8 files changed

+61
-23
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
<groupId>com.codingapi.springboot</groupId>
1414
<artifactId>springboot-parent</artifactId>
15-
<version>1.5.2</version>
15+
<version>1.5.3</version>
1616

1717
<url>https://github.com/codingapi/springboot-framewrok</url>
1818
<name>springboot-parent</name>

springboot-starter-data-fast/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>springboot-parent</artifactId>
77
<groupId>com.codingapi.springboot</groupId>
8-
<version>1.5.2</version>
8+
<version>1.5.3</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/DataFastConfiguration.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.codingapi.springboot.fast.executor.JpaExecutor;
44
import com.codingapi.springboot.fast.mapping.MvcEndpointMapping;
55
import com.codingapi.springboot.fast.registrar.MvcMappingRegistrar;
6+
import org.springframework.aop.Advisor;
67
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
78
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
89
import org.springframework.context.annotation.Bean;
@@ -11,6 +12,7 @@
1112
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
1213

1314
import javax.persistence.EntityManager;
15+
import java.util.List;
1416

1517
@Configuration
1618
@ConditionalOnClass(WebMvcConfigurer.class)
@@ -25,8 +27,10 @@ public MvcEndpointMapping mvcEndpointMapping(RequestMappingHandlerMapping handle
2527

2628
@Bean(initMethod = "registerMvcMapping")
2729
@ConditionalOnMissingBean
28-
public MvcMappingRegistrar mappingRegistrar(MvcEndpointMapping mvcEndpointMapping, JpaExecutor jpaExecutor) {
29-
return new MvcMappingRegistrar(mvcEndpointMapping, jpaExecutor);
30+
public MvcMappingRegistrar mappingRegistrar(MvcEndpointMapping mvcEndpointMapping,
31+
JpaExecutor jpaExecutor,
32+
List<Advisor> advisors) {
33+
return new MvcMappingRegistrar(mvcEndpointMapping, jpaExecutor,advisors);
3034
}
3135

3236
@Bean

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/MvcMethodProxy.java renamed to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/executor/MvcMethodInterceptor.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,38 @@
22

33
import com.codingapi.springboot.fast.annotation.FastMapping;
44
import lombok.AllArgsConstructor;
5+
import org.aopalliance.intercept.MethodInterceptor;
6+
import org.aopalliance.intercept.MethodInvocation;
57

6-
import java.lang.reflect.InvocationHandler;
78
import java.lang.reflect.Method;
89

910
@AllArgsConstructor
10-
public class MvcMethodProxy implements InvocationHandler {
11+
public class MvcMethodInterceptor implements MethodInterceptor {
1112

1213
private final JpaExecutor jpaExecutor;
1314

1415
@Override
15-
public Object invoke(Object proxy, Method method, Object[] args)
16+
public Object invoke(MethodInvocation invocation)
1617
throws Throwable {
18+
Method method = invocation.getMethod();
19+
Object[] args = invocation.getArguments();
1720

1821
if (method.equals(Object.class.getMethod("equals", Object.class))) {
1922
return false;
2023
}
24+
2125
if (method.equals(Object.class.getMethod("hashCode"))) {
2226
return hashCode();
2327
}
28+
2429
FastMapping fastMapping = method.getAnnotation(FastMapping.class);
2530
if (fastMapping != null) {
2631
Class<?> returnType = method.getReturnType();
2732
return jpaExecutor.execute(fastMapping.value(), fastMapping.countQuery(), args, returnType);
2833
}
29-
3034
// mvc mapping proxy can't execute return null.
3135
return null;
3236
}
37+
38+
3339
}

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/registrar/MvcMappingRegistrar.java

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,42 @@
33
import com.codingapi.springboot.fast.annotation.FastMapping;
44
import com.codingapi.springboot.fast.exception.FastMappingErrorException;
55
import com.codingapi.springboot.fast.executor.JpaExecutor;
6-
import com.codingapi.springboot.fast.executor.MvcMethodProxy;
6+
import com.codingapi.springboot.fast.executor.MvcMethodInterceptor;
77
import com.codingapi.springboot.fast.mapping.MvcEndpointMapping;
8-
import lombok.AllArgsConstructor;
98
import lombok.SneakyThrows;
109
import lombok.extern.slf4j.Slf4j;
10+
import org.springframework.aop.Advisor;
11+
import org.springframework.aop.framework.AdvisedSupport;
12+
import org.springframework.aop.framework.AopProxy;
13+
import org.springframework.aop.framework.AopProxyFactory;
14+
import org.springframework.aop.framework.DefaultAopProxyFactory;
1115
import org.springframework.data.domain.Pageable;
1216
import org.springframework.util.StringUtils;
1317

1418
import java.lang.reflect.Method;
15-
import java.lang.reflect.Proxy;
1619
import java.util.HashSet;
20+
import java.util.List;
1721
import java.util.Set;
1822

1923
@Slf4j
20-
@AllArgsConstructor
2124
public class MvcMappingRegistrar {
2225
protected final static Set<Class<?>> classSet = new HashSet<>();
2326
private final MvcEndpointMapping mvcEndpointMapping;
24-
private final JpaExecutor jpaExecutor;
27+
28+
private final AopProxyFactory proxyFactory;
29+
30+
private final List<Advisor> advisors;
31+
32+
private final MvcMethodInterceptor interceptor;
33+
34+
public MvcMappingRegistrar(MvcEndpointMapping mvcEndpointMapping,
35+
JpaExecutor jpaExecutor,
36+
List<Advisor> advisors) {
37+
this.mvcEndpointMapping = mvcEndpointMapping;
38+
this.advisors = advisors;
39+
this.interceptor = new MvcMethodInterceptor(jpaExecutor);
40+
this.proxyFactory = new DefaultAopProxyFactory();
41+
}
2542

2643
@SneakyThrows
2744
public void registerMvcMapping() {
@@ -30,36 +47,47 @@ public void registerMvcMapping() {
3047
for (Method method : methods) {
3148
FastMapping fastMapping = method.getAnnotation(FastMapping.class);
3249
if (verify(fastMapping, method)) {
33-
MvcMethodProxy handler = new MvcMethodProxy(jpaExecutor);
34-
Object methodProxy = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{clazz}, handler);
35-
mvcEndpointMapping.addMapping(fastMapping.mapping(), fastMapping.method(), methodProxy, method);
50+
AdvisedSupport advisedSupport = createAdvisedSupport(clazz);
51+
AopProxy proxy = proxyFactory.createAopProxy(advisedSupport);
52+
mvcEndpointMapping.addMapping(fastMapping.mapping(), fastMapping.method(),
53+
proxy.getProxy(), method);
3654
}
3755
}
3856
}
3957
}
4058

59+
private AdvisedSupport createAdvisedSupport(Class<?> clazz) {
60+
AdvisedSupport advisedSupport = new AdvisedSupport(clazz);
61+
advisedSupport.setTarget(interceptor);
62+
advisedSupport.addAdvisors(advisors);
63+
advisedSupport.addAdvice(interceptor);
64+
return advisedSupport;
65+
}
66+
4167
private boolean verify(FastMapping fastMapping, Method method) throws FastMappingErrorException {
4268
if (fastMapping == null) {
4369
return false;
4470
}
4571

4672
if (!StringUtils.hasText(fastMapping.mapping())) {
47-
throw new FastMappingErrorException(String.format("fast method %s missing mapping .", method.getName()));
73+
throw new FastMappingErrorException(String.format("fast method %s missing mapping .",
74+
method.getName()));
4875
}
4976

5077
if (!StringUtils.hasText(fastMapping.value())) {
51-
throw new FastMappingErrorException(String.format("fast mapping %s missing value .", fastMapping.mapping()));
78+
throw new FastMappingErrorException(String.format("fast mapping %s missing value .",
79+
fastMapping.mapping()));
5280
}
5381

5482
Class<?>[] parameterTypes = method.getParameterTypes();
5583
for (Class<?> parameter : parameterTypes) {
5684
if (Pageable.class.isAssignableFrom(parameter)) {
5785
if (!StringUtils.hasText(fastMapping.countQuery())) {
58-
throw new FastMappingErrorException(String.format("fast mapping %s missing countQuery .", fastMapping.mapping()));
86+
throw new FastMappingErrorException(String.format("fast mapping %s missing countQuery .",
87+
fastMapping.mapping()));
5988
}
6089
}
6190
}
62-
6391
return true;
6492
}
6593

springboot-starter-id-generator/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>springboot-parent</artifactId>
77
<groupId>com.codingapi.springboot</groupId>
8-
<version>1.5.2</version>
8+
<version>1.5.3</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

springboot-starter-security-jwt/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<artifactId>springboot-parent</artifactId>
88
<groupId>com.codingapi.springboot</groupId>
9-
<version>1.5.2</version>
9+
<version>1.5.3</version>
1010
</parent>
1111

1212
<artifactId>springboot-starter-security-jwt</artifactId>

springboot-starter/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>com.codingapi.springboot</groupId>
77
<artifactId>springboot-parent</artifactId>
8-
<version>1.5.2</version>
8+
<version>1.5.3</version>
99
</parent>
1010
<artifactId>springboot-starter</artifactId>
1111

0 commit comments

Comments
 (0)