Skip to content

Commit 1c2f57f

Browse files
committed
优化GrayManger加载Sping容器中的RequestInterceptor的逻辑
1 parent cef09a4 commit 1c2f57f

File tree

10 files changed

+54
-40
lines changed

10 files changed

+54
-40
lines changed

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/AbstractCommunicableGrayManager.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,16 @@
33
import cn.springcloud.gray.communication.InformationClient;
44
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
55

6-
import java.util.List;
7-
86
public abstract class AbstractCommunicableGrayManager extends SimpleGrayManager implements CommunicableGrayManager {
97

108
private GrayClientConfig grayClientConfig;
119
private InformationClient informationClient;
1210

1311
public AbstractCommunicableGrayManager(
14-
GrayClientConfig grayClientConfig, GrayDecisionFactoryKeeper grayDecisionFactoryKeeper,
15-
List<RequestInterceptor> requestInterceptors, InformationClient informationClient) {
16-
super(grayDecisionFactoryKeeper, requestInterceptors);
12+
GrayClientConfig grayClientConfig,
13+
GrayDecisionFactoryKeeper grayDecisionFactoryKeeper,
14+
InformationClient informationClient) {
15+
super(grayDecisionFactoryKeeper);
1716
this.grayClientConfig = grayClientConfig;
1817
this.informationClient = informationClient;
1918
}

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/AbstractGrayManager.java

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package cn.springcloud.gray;
22

33
import cn.springcloud.gray.decision.GrayDecision;
4-
import cn.springcloud.gray.decision.MultiGrayDecision;
5-
import cn.springcloud.gray.decision.factory.GrayDecisionFactory;
64
import cn.springcloud.gray.decision.GrayDecisionFactoryKeeper;
5+
import cn.springcloud.gray.decision.MultiGrayDecision;
76
import cn.springcloud.gray.model.DecisionDefinition;
87
import cn.springcloud.gray.model.GrayInstance;
98
import cn.springcloud.gray.model.PolicyDefinition;
@@ -29,8 +28,7 @@ public abstract class AbstractGrayManager implements GrayManager {
2928

3029

3130
public AbstractGrayManager(
32-
GrayDecisionFactoryKeeper grayDecisionFactoryKeeper, List<RequestInterceptor> requestInterceptors) {
33-
initRequestInterceptors(requestInterceptors);
31+
GrayDecisionFactoryKeeper grayDecisionFactoryKeeper) {
3432
this.grayDecisionFactoryKeeper = grayDecisionFactoryKeeper;
3533
}
3634

@@ -78,31 +76,32 @@ private GrayDecision createGrayDecision(PolicyDefinition policyDefinition) {
7876
}
7977

8078

81-
private void initRequestInterceptors(List<RequestInterceptor> requestInterceptors) {
82-
if (requestInterceptors == null || requestInterceptors.isEmpty()) {
83-
return;
84-
}
85-
List<RequestInterceptor> all = new ArrayList<>();
86-
for (RequestInterceptor interceptor : requestInterceptors) {
87-
if (StringUtils.equals(interceptor.interceptroType(), "all")) {
88-
all.add(interceptor);
89-
} else {
90-
List<RequestInterceptor> interceptors = this.requestInterceptors.get(interceptor.interceptroType());
91-
if (interceptors == null) {
92-
interceptors = new ArrayList<>();
93-
this.requestInterceptors.put(interceptor.interceptroType(), interceptors);
79+
public void setRequestInterceptors(Collection<RequestInterceptor> requestInterceptors) {
80+
Map<String, List<RequestInterceptor>> requestInterceptorMap = new HashMap<>();
81+
if (CollectionUtils.isNotEmpty(requestInterceptors)) {
82+
List<RequestInterceptor> all = new ArrayList<>();
83+
for (RequestInterceptor interceptor : requestInterceptors) {
84+
if (StringUtils.equals(interceptor.interceptroType(), "all")) {
85+
all.add(interceptor);
86+
} else {
87+
List<RequestInterceptor> interceptors = requestInterceptorMap.get(interceptor.interceptroType());
88+
if (interceptors == null) {
89+
interceptors = new ArrayList<>();
90+
requestInterceptorMap.put(interceptor.interceptroType(), interceptors);
91+
}
92+
interceptors.add(interceptor);
9493
}
95-
interceptors.add(interceptor);
9694
}
95+
putTypeAllTo(requestInterceptorMap, all);
9796
}
98-
putTypeAllTo(all);
97+
this.requestInterceptors = requestInterceptorMap;
9998
}
10099

101-
private void putTypeAllTo(List<RequestInterceptor> all) {
100+
private void putTypeAllTo(Map<String, List<RequestInterceptor>> requestInterceptorMap, List<RequestInterceptor> all) {
102101
if (all.isEmpty()) {
103102
return;
104103
}
105-
requestInterceptors.values().forEach(list -> {
104+
requestInterceptorMap.values().forEach(list -> {
106105
list.addAll(all);
107106
OrderComparator.sort(list);
108107
});

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/DefaultGrayManager.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ public DefaultGrayManager(
2424
GrayClientConfig grayClientConfig,
2525
GrayLoadProperties grayLoadProperties,
2626
GrayDecisionFactoryKeeper grayDecisionFactoryKeeper,
27-
List<RequestInterceptor> requestInterceptors,
2827
InformationClient informationClient) {
29-
super(grayClientConfig, grayDecisionFactoryKeeper, requestInterceptors, informationClient);
28+
super(grayClientConfig, grayDecisionFactoryKeeper, informationClient);
3029
this.grayLoadProperties = grayLoadProperties;
3130
openForWork();
3231
}

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayClientInitializer.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.springframework.context.ApplicationContext;
99
import org.springframework.context.ApplicationContextAware;
1010

11+
import java.util.Map;
12+
1113
@Slf4j
1214
public class GrayClientInitializer implements ApplicationContextAware, InitializingBean {
1315
private ApplicationContext cxt;
@@ -17,6 +19,9 @@ public void afterPropertiesSet() throws Exception {
1719
GrayClientHolder.setGrayManager(getBean("grayManager", GrayManager.class));
1820
GrayClientHolder.setRequestLocalStorage(getBean("requestLocalStorage", RequestLocalStorage.class));
1921
GrayClientHolder.setServerExplainer(getBean("serverExplainer", ServerExplainer.class));
22+
23+
initGrayManagerRequestInterceptors();
24+
2025
}
2126

2227

@@ -38,4 +43,16 @@ private <T> T getBean(String beanName, Class<T> cls) {
3843
}
3944
return t;
4045
}
46+
47+
48+
/**
49+
* 为了解耦合,特别将GrayManger加载Sping容器中的RequestInterceptor的逻辑独立出来
50+
*/
51+
private void initGrayManagerRequestInterceptors() {
52+
Map<String, RequestInterceptor> requestInterceptors = cxt.getBeansOfType(RequestInterceptor.class);
53+
GrayManager grayManager = GrayClientHolder.getGrayManager();
54+
if (grayManager instanceof AbstractGrayManager) {
55+
((AbstractGrayManager) grayManager).setRequestInterceptors(requestInterceptors.values());
56+
}
57+
}
4158
}

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/GrayManager.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,5 @@ public interface GrayManager {
4242

4343
List<RequestInterceptor> getRequeestInterceptors(String interceptroType);
4444

45-
4645
void shutdown();
4746
}

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/SimpleGrayManager.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import java.util.Collection;
99
import java.util.Collections;
10-
import java.util.List;
1110
import java.util.Map;
1211
import java.util.concurrent.ConcurrentHashMap;
1312
import java.util.concurrent.locks.Lock;
@@ -21,8 +20,8 @@ public class SimpleGrayManager extends AbstractGrayManager {
2120
protected Lock lock = new ReentrantLock();
2221

2322

24-
public SimpleGrayManager(GrayDecisionFactoryKeeper grayDecisionFactoryKeeper, List<RequestInterceptor> requestInterceptors) {
25-
super(grayDecisionFactoryKeeper, requestInterceptors);
23+
public SimpleGrayManager(GrayDecisionFactoryKeeper grayDecisionFactoryKeeper) {
24+
super(grayDecisionFactoryKeeper);
2625
}
2726

2827

spring-cloud-gray-client/src/main/java/cn/springcloud/gray/client/config/GrayClientAutoConfiguration.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
import org.springframework.context.annotation.Configuration;
1919
import org.springframework.context.annotation.Import;
2020

21-
import java.util.List;
22-
2321
@Configuration
2422
@EnableConfigurationProperties(
2523
{GrayClientProperties.class,
@@ -42,11 +40,9 @@ public class GrayClientAutoConfiguration {
4240
public GrayManager grayManager(
4341
@Autowired(required = false) GrayLoadProperties grayLoadProperties,
4442
GrayDecisionFactoryKeeper grayDecisionFactoryKeeper,
45-
@Autowired(required = false) List<RequestInterceptor> requestInterceptors,
4643
@Autowired(required = false) InformationClient informationClient) {
4744
return new DefaultGrayManager(
48-
grayClientProperties, grayLoadProperties, grayDecisionFactoryKeeper,
49-
requestInterceptors, informationClient);
45+
grayClientProperties, grayLoadProperties, grayDecisionFactoryKeeper, informationClient);
5046
}
5147

5248

spring-cloud-gray-samples/spring-cloud-gray-service-a-sample/src/main/java/cn/springcloud/service/a/configuration/GraylConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ public class GraylConfiguration {
1818

1919
@Bean
2020
public SimpleGrayManager grayManager() {
21-
return new SimpleGrayManager(grayDecisionFactoryKeeper, requestInterceptors);
21+
SimpleGrayManager simpleGrayManager = new SimpleGrayManager(grayDecisionFactoryKeeper);
22+
simpleGrayManager.setRequestInterceptors(requestInterceptors);
23+
return simpleGrayManager;
2224
}
2325

2426

spring-cloud-gray-samples/spring-cloud-gray-service-b-sample/src/main/java/cn/springcloud/gray/service/b/configuration/GraylConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ public class GraylConfiguration {
1818

1919
@Bean
2020
public SimpleGrayManager grayManager() {
21-
return new SimpleGrayManager(grayDecisionFactoryKeeper, requestInterceptors);
21+
SimpleGrayManager simpleGrayManager = new SimpleGrayManager(grayDecisionFactoryKeeper);
22+
simpleGrayManager.setRequestInterceptors(requestInterceptors);
23+
return simpleGrayManager;
2224
}
2325

2426

spring-cloud-gray-samples/spring-cloud-gray-zuul-sample/src/main/java/cn/springcloud/gray/zuul/configuration/GraylConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ public class GraylConfiguration {
1919

2020
@Bean
2121
public GrayManager grayManager() {
22-
return new SimpleGrayManager(grayDecisionFactoryKeeper, requestInterceptors);
22+
SimpleGrayManager simpleGrayManager = new SimpleGrayManager(grayDecisionFactoryKeeper);
23+
simpleGrayManager.setRequestInterceptors(requestInterceptors);
24+
return simpleGrayManager;
2325
}
2426

2527

0 commit comments

Comments
 (0)