Skip to content

Commit 9a4ad2e

Browse files
committed
优化
1 parent 92ef8bd commit 9a4ad2e

File tree

15 files changed

+108
-86
lines changed

15 files changed

+108
-86
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@
1111
@Target({ElementType.PARAMETER})
1212
@Retention(RetentionPolicy.RUNTIME)
1313
@Documented
14-
public @interface DataBeanConsumer {
14+
public @interface DataConsumer {
1515
String id();
1616
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
@Target({ElementType.METHOD})
1212
@Retention(RetentionPolicy.RUNTIME)
1313
@Documented
14-
public @interface DataBeanProvider {
14+
public @interface DataProvider {
1515
String id();
1616
long timeout() default 10000;
1717
}

spring-boot-data-aggregate-autoconfigure/src/main/java/org/feego/spring/autoconfigure/BeanAggregateAutoConfiguration.java

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
import org.feego.spring.aggregate.model.*;
77
import org.feego.spring.aggregate.repository.DataProviderRepository;
88
import org.feego.spring.aggregate.repository.impl.DataProviderRepositoryImpl;
9-
import org.feego.spring.aggregate.service.DataBeanAgregateQueryServiceImpl;
10-
import org.feego.spring.annotation.DataBeanConsumer;
11-
import org.feego.spring.annotation.DataBeanProvider;
9+
import org.feego.spring.aggregate.service.impl.DataBeanAgregateQueryServiceImpl;
10+
import org.feego.spring.annotation.DataConsumer;
11+
import org.feego.spring.annotation.DataProvider;
1212
import org.feego.spring.annotation.InvokeParameter;
1313
import org.reflections.Reflections;
1414
import org.reflections.scanners.MethodAnnotationsScanner;
@@ -77,45 +77,53 @@ private void scanProviders(DataProviderRepository repository) {
7777
if(properties.getBasePackpages() != null) {
7878
for (String basePackage : properties.getBasePackpages()) {
7979
Reflections reflections = new Reflections(basePackage, new MethodAnnotationsScanner());
80-
Set<Method> providerMethods = reflections.getMethodsAnnotatedWith(DataBeanProvider.class);
80+
Set<Method> providerMethods = reflections.getMethodsAnnotatedWith(DataProvider.class);
8181
for (Method method : providerMethods) {
82-
DataProvider provider = new DataProvider();
83-
DataBeanProvider beanProvider = method.getAnnotation(DataBeanProvider.class);
84-
provider.setId(beanProvider.id());
85-
provider.setMethod(method);
86-
provider.setTimeout(beanProvider.timeout());
87-
Parameter[] parameters = provider.getMethod().getParameters();
88-
List<MethodArg> methodArgs = new ArrayList<>(method.getParameterCount());
89-
provider.setDepends(new ArrayList<>(method.getParameterCount()));
90-
provider.setParams(new ArrayList<>(method.getParameterCount()));
91-
for (Parameter parameter : parameters) {
92-
MethodArg methodArg = new MethodArg();
93-
DataBeanConsumer bean = parameter.getAnnotation(DataBeanConsumer.class);
94-
InvokeParameter invokeParameter = parameter.getAnnotation(InvokeParameter.class);
95-
if(bean != null) {
96-
methodArg.setAnnotionKey(bean.id());
97-
methodArg.setDenpendType(DenpendType.OTHER_MODEL);
98-
DataDepend dataDepend = new DataDepend();
99-
dataDepend.setClazz(parameter.getType());
100-
dataDepend.setId(bean.id());
101-
provider.getDepends().add(dataDepend);
102-
} else if (invokeParameter != null){
103-
methodArg.setAnnotionKey(invokeParameter.value());
104-
methodArg.setDenpendType(DenpendType.INVOKE_PARAM);
105-
InvokeParam param = new InvokeParam();
106-
param.setKey(param.getKey());
107-
provider.getParams().add(param);
108-
} else {
109-
throw new IllegalArgumentException(
110-
"paramter must ananotion by InvokeParameter or DataBeanConsumer");
111-
}
112-
methodArg.setParameter(parameter);
113-
methodArgs.add(methodArg);
114-
}
115-
provider.setMethodArgs(methodArgs);
116-
repository.put(beanProvider.id(),provider);
82+
dealProvideMethod(repository, method);
11783
}
11884
}
11985
}
12086
}
87+
88+
private void dealProvideMethod(DataProviderRepository repository, Method method) {
89+
DataProvideDefination provider = new DataProvideDefination();
90+
DataProvider beanProvider = method.getAnnotation(DataProvider.class);
91+
provider.setId(beanProvider.id());
92+
provider.setMethod(method);
93+
provider.setTimeout(beanProvider.timeout());
94+
Parameter[] parameters = provider.getMethod().getParameters();
95+
List<MethodArg> methodArgs = new ArrayList<>(method.getParameterCount());
96+
provider.setDepends(new ArrayList<>(method.getParameterCount()));
97+
provider.setParams(new ArrayList<>(method.getParameterCount()));
98+
for (Parameter parameter : parameters) {
99+
dealMethodParamter(provider, methodArgs, parameter);
100+
}
101+
provider.setMethodArgs(methodArgs);
102+
repository.put(beanProvider.id(),provider);
103+
}
104+
105+
private void dealMethodParamter(DataProvideDefination provideDefination, List<MethodArg> methodArgs, Parameter parameter) {
106+
MethodArg methodArg = new MethodArg();
107+
DataConsumer bean = parameter.getAnnotation(DataConsumer.class);
108+
InvokeParameter invokeParameter = parameter.getAnnotation(InvokeParameter.class);
109+
if(bean != null) {
110+
methodArg.setAnnotionKey(bean.id());
111+
methodArg.setDenpendType(DenpendType.OTHER_MODEL);
112+
DataConsumeDefination dataConsumeDefination = new DataConsumeDefination();
113+
dataConsumeDefination.setClazz(parameter.getType());
114+
dataConsumeDefination.setId(bean.id());
115+
provideDefination.getDepends().add(dataConsumeDefination);
116+
} else if (invokeParameter != null){
117+
methodArg.setAnnotionKey(invokeParameter.value());
118+
methodArg.setDenpendType(DenpendType.INVOKE_PARAM);
119+
InvokeParameterDefination parameterDefination = new InvokeParameterDefination();
120+
parameterDefination.setKey(invokeParameter.value());
121+
provideDefination.getParams().add(parameterDefination);
122+
} else {
123+
throw new IllegalArgumentException(
124+
"paramter must ananotion by InvokeParameter or DataConsumer");
125+
}
126+
methodArg.setParameter(parameter);
127+
methodArgs.add(methodArg);
128+
}
121129
}

spring-boot-data-aggregate-core/src/main/java/org/feego/spring/aggregate/model/DataDepend.java renamed to spring-boot-data-aggregate-core/src/main/java/org/feego/spring/aggregate/model/DataConsumeDefination.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @since 2019/6/2 22:13
88
*/
99
@Data
10-
public class DataDepend {
10+
public class DataConsumeDefination {
1111
private String id;
1212
private Class<?> clazz;
1313
}

spring-boot-data-aggregate-core/src/main/java/org/feego/spring/aggregate/model/DataProvider.java renamed to spring-boot-data-aggregate-core/src/main/java/org/feego/spring/aggregate/model/DataProvideDefination.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
* @since 2019/6/2 21:30
1111
*/
1212
@Data
13-
public class DataProvider {
13+
public class DataProvideDefination {
1414
private String id;
1515
private Method method;
1616
private Long timeout;
17-
private List<DataDepend> depends;
18-
private List<InvokeParam> params;
17+
private List<DataConsumeDefination> depends;
18+
private List<InvokeParameterDefination> params;
1919
private List<MethodArg> methodArgs;
2020
}

spring-boot-data-aggregate-core/src/main/java/org/feego/spring/aggregate/model/InvokeParam.java renamed to spring-boot-data-aggregate-core/src/main/java/org/feego/spring/aggregate/model/InvokeParameterDefination.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
* @since 2019/6/2 22:14
88
*/
99
@Data
10-
public class InvokeParam {
10+
public class InvokeParameterDefination {
1111
private String key;
1212
}
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package org.feego.spring.aggregate.repository;
22

3-
import org.feego.spring.aggregate.model.DataProvider;
3+
import org.feego.spring.aggregate.model.DataProvideDefination;
44

55
/**
66
77
* @since 2019/6/2 21:26
88
*/
99
public interface DataProviderRepository {
10-
void put(String id, DataProvider dataProvider);
10+
void put(String id, DataProvideDefination dataProvideDefination);
1111

12-
DataProvider get(String id);
12+
DataProvideDefination get(String id);
1313

1414
boolean contains(String id);
1515
}

spring-boot-data-aggregate-core/src/main/java/org/feego/spring/aggregate/repository/impl/DataProviderRepositoryImpl.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.feego.spring.aggregate.repository.impl;
22

3-
import org.feego.spring.aggregate.model.DataProvider;
3+
import org.feego.spring.aggregate.model.DataProvideDefination;
44
import org.feego.spring.aggregate.repository.DataProviderRepository;
55
import org.springframework.util.Assert;
66

@@ -12,16 +12,16 @@
1212
*/
1313
public class DataProviderRepositoryImpl implements DataProviderRepository {
1414

15-
private ConcurrentHashMap<String,DataProvider> providerMap = new ConcurrentHashMap<>();
15+
private ConcurrentHashMap<String,DataProvideDefination> providerMap = new ConcurrentHashMap<>();
1616

1717
@Override
18-
public void put(String id, DataProvider dataProvider) {
18+
public void put(String id, DataProvideDefination dataProvideDefination) {
1919
Assert.isTrue(! providerMap.containsKey(id),"data provider exisit! id: " + id);
20-
providerMap.put(id,dataProvider);
20+
providerMap.put(id, dataProvideDefination);
2121
}
2222

2323
@Override
24-
public DataProvider get(String id) {
24+
public DataProvideDefination get(String id) {
2525
return providerMap.get(id);
2626
}
2727

spring-boot-data-aggregate-core/src/main/java/org/feego/spring/aggregate/service/DataBeanAgregateQueryService.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,15 @@
88
* @since 2019/6/2 21:49
99
*/
1010
public interface DataBeanAgregateQueryService {
11-
<T> T get(String id, Map<String,Object> invokeParams, Class<T> clazz) throws InterruptedException, InvocationTargetException, IllegalAccessException;
12-
}
11+
12+
/**
13+
* 并发+递归获取并拼装数据
14+
*
15+
* @param id data id
16+
* @param invokeParams query parameters
17+
* @param resultType final result type
18+
* @param <T> final result type
19+
* @return final result
20+
*/
21+
<T> T get(String id, Map<String,Object> invokeParams, Class<T> resultType) throws InterruptedException, InvocationTargetException, IllegalAccessException;
22+
}
Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
package org.feego.spring.aggregate.service;
1+
package org.feego.spring.aggregate.service.impl;
22

33
import lombok.Setter;
44
import lombok.extern.slf4j.Slf4j;
5-
import org.apache.commons.lang3.StringUtils;
6-
import org.feego.spring.aggregate.model.DataDepend;
7-
import org.feego.spring.aggregate.model.DataProvider;
5+
import org.feego.spring.aggregate.model.DataConsumeDefination;
6+
import org.feego.spring.aggregate.model.DataProvideDefination;
87
import org.feego.spring.aggregate.model.DenpendType;
98
import org.feego.spring.aggregate.model.MethodArg;
109
import org.feego.spring.aggregate.repository.DataProviderRepository;
10+
import org.feego.spring.aggregate.service.DataBeanAgregateQueryService;
1111
import org.springframework.context.ApplicationContext;
1212
import org.springframework.util.Assert;
1313

@@ -35,26 +35,17 @@ public DataBeanAgregateQueryServiceImpl(DataProviderRepository repository) {
3535
this.repository = repository;
3636
}
3737

38-
/**
39-
* 并发+递归获取并拼装数据
40-
*
41-
* @param id
42-
* @param invokeParams
43-
* @param clazz
44-
* @param <T>
45-
* @return
46-
*/
4738
@Override
48-
public <T> T get(String id, Map<String, Object> invokeParams, Class<T> clazz) throws InterruptedException,
39+
public <T> T get(String id, Map<String, Object> invokeParams, Class<T> resultType) throws InterruptedException,
4940
InvocationTargetException, IllegalAccessException {
5041
Assert.isTrue(repository.contains(id),"id not exisit");
5142
long startTime = System.currentTimeMillis();
52-
DataProvider provider = repository.get(id);
43+
DataProvideDefination provider = repository.get(id);
5344
Map<String,Object> dependObjectMap = new HashMap<>();
5445
if(provider.getDepends() != null && ! provider.getDepends().isEmpty()) {
5546
CountDownLatch stopDownLatch = new CountDownLatch(provider.getDepends().size());
5647
Map<String,Future<?>> futureMap = new HashMap<>(provider.getDepends().size());
57-
for (DataDepend depend : provider.getDepends()) {
48+
for (DataConsumeDefination depend : provider.getDepends()) {
5849
Future<?> future = executorService.submit(() -> {
5950
try {
6051
Object o = get(depend.getId(), invokeParams, depend.getClazz());
@@ -93,13 +84,18 @@ public <T> T get(String id, Map<String, Object> invokeParams, Class<T> clazz) th
9384
}
9485
}
9586

96-
T result = clazz.cast(provider.getMethod()
87+
T result = resultType.cast(provider.getMethod()
9788
.invoke(applicationContext.getBean(provider.getMethod().getDeclaringClass()), args));
9889
if (log.isInfoEnabled()) {
99-
log.info("query id: {}, costTime: {}ms, model: {}, params: {}",id,
90+
log.info("query id: {}, " +
91+
"costTime: {}ms, " +
92+
"resultType: {}, " +
93+
"invokeMethod: {}",
94+
id,
10095
System.currentTimeMillis() - startTime,
10196
provider.getMethod().getReturnType().getSimpleName(),
102-
StringUtils.join(args));
97+
provider.getMethod().getDeclaringClass().getSimpleName() + "#" + provider.getMethod().getName()
98+
);
10399
}
104100
return result;
105101
}

0 commit comments

Comments
 (0)