From 9a60c851151a1453e3bef5df6394a0b6eb2adde3 Mon Sep 17 00:00:00 2001 From: RovingSea <69103691+RovingSea@users.noreply.github.com> Date: Tue, 25 Oct 2022 19:15:24 +0800 Subject: [PATCH] style(#2689): Polish code and extract commonalities (#2849) * style(#2689): Polish code and extract commonalities - Increase the readability of collect uris - Extract the same operation of extending ServiceMeta List - Use generics to indicate types * style(#2689): Polish code - Improve documentation --- .../appactive/provider/NacosAutoConfig.java | 3 +- .../cloud/appactive/provider/URIRegister.java | 136 ++++++++++-------- 2 files changed, 79 insertions(+), 60 deletions(-) diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/NacosAutoConfig.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/NacosAutoConfig.java index 37b9517c6..a67de7f27 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/NacosAutoConfig.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/NacosAutoConfig.java @@ -19,6 +19,7 @@ package com.alibaba.cloud.appactive.provider; import java.util.List; import javax.annotation.PostConstruct; +import javax.servlet.Filter; import com.alibaba.cloud.nacos.registry.NacosRegistration; @@ -33,7 +34,7 @@ import org.springframework.context.annotation.Configuration; public class NacosAutoConfig { @Autowired - private List beanList; + private List> beanList; @Autowired(required = false) private NacosRegistration nacosRegistration; diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/URIRegister.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/URIRegister.java index 117718d2d..d4bae51ab 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/URIRegister.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-appactive/src/main/java/com/alibaba/cloud/appactive/provider/URIRegister.java @@ -36,6 +36,7 @@ import org.springframework.boot.web.servlet.FilterRegistrationBean; /** * @author raozihao, mageekchiu * @author Steve + * @author RovingSea */ public final class URIRegister { @@ -46,68 +47,85 @@ public final class URIRegister { private URIRegister() { } - public static void collectUris(List filterRegistrationBeans) { - if (CollectionUtils.isNotEmpty(filterRegistrationBeans)) { - List serviceMetaList = new LinkedList<>(); - boolean hasWildChar = false; - for (FilterRegistrationBean filterRegistrationBean : filterRegistrationBeans) { - Filter filter = filterRegistrationBean.getFilter(); - if (filter == null) { - continue; - } - if (filter instanceof CoreServiceFilter) { - Collection urlPatterns = filterRegistrationBean - .getUrlPatterns(); - for (String urlPattern : urlPatterns) { - if (MATCH_ALL.equalsIgnoreCase(urlPattern)) { - hasWildChar = true; - } - ServiceMeta serviceMeta = new ServiceMeta(urlPattern, - ResourceActiveType.UNIT_RESOURCE_TYPE); - serviceMetaList.add(serviceMeta); - } - } - else if (filter instanceof GlobalServiceFilter) { - Collection urlPatterns = filterRegistrationBean - .getUrlPatterns(); - for (String urlPattern : urlPatterns) { - if (MATCH_ALL.equalsIgnoreCase(urlPattern)) { - hasWildChar = true; - } - ServiceMeta serviceMeta = new ServiceMeta(urlPattern, - ResourceActiveType.CENTER_RESOURCE_TYPE); - serviceMetaList.add(serviceMeta); - } - } - else if (filter instanceof GeneralServiceFilter) { - Collection urlPatterns = filterRegistrationBean - .getUrlPatterns(); - for (String urlPattern : urlPatterns) { - if (MATCH_ALL.equalsIgnoreCase(urlPattern)) { - hasWildChar = true; - } - ServiceMeta serviceMeta = new ServiceMeta(urlPattern, - ResourceActiveType.NORMAL_RESOURCE_TYPE); - serviceMetaList.add(serviceMeta); - } - } + public static void collectUris(List> beanList) { + if (CollectionUtils.isEmpty(beanList)) { + return; + } + List serviceMetaList = new LinkedList<>(); + boolean hasWildChar = false; + for (FilterRegistrationBean filterRegistrationBean : beanList) { + Filter filter = filterRegistrationBean.getFilter(); + if (filter == null) { + continue; } - if (CollectionUtils.isNotEmpty(serviceMetaList)) { - if (!hasWildChar) { - // 保证所有 service(app+uri) 都纳入管理,不然不好做缓存管理 - ServiceMeta serviceMeta = new ServiceMeta(MATCH_ALL, - ResourceActiveType.NORMAL_RESOURCE_TYPE); - serviceMetaList.add(serviceMeta); - } - serviceMetaObject = new ServiceMetaObject(); - Collections.sort(serviceMetaList); - serviceMetaObject.setServiceMetaList(serviceMetaList); - String meta = JSON.toJSONString(serviceMetaList); - serviceMetaObject.setMeta(meta); - String md5 = DigestUtils.md5Hex(meta.getBytes(StandardCharsets.UTF_8)); - serviceMetaObject.setMd5OfList(md5); + Collection urlPatterns = filterRegistrationBean.getUrlPatterns(); + if (filter instanceof CoreServiceFilter) { + hasWildChar = collectServiceMetas(serviceMetaList, hasWildChar, urlPatterns, + ResourceActiveType.UNIT_RESOURCE_TYPE); + } else if (filter instanceof GlobalServiceFilter) { + hasWildChar = collectServiceMetas(serviceMetaList, hasWildChar, urlPatterns, + ResourceActiveType.CENTER_RESOURCE_TYPE); + } else if (filter instanceof GeneralServiceFilter) { + hasWildChar = collectServiceMetas(serviceMetaList, hasWildChar, urlPatterns, + ResourceActiveType.NORMAL_RESOURCE_TYPE); } } + if (CollectionUtils.isEmpty(serviceMetaList)) { + return; + } + if (!hasWildChar) { + // 保证所有 service(app+uri) 都纳入管理,不然不好做缓存管理 + collectServiceMeta(serviceMetaList, MATCH_ALL, ResourceActiveType.NORMAL_RESOURCE_TYPE); + } + initServiceMetaObject(serviceMetaList); + } + + /** + * Initialize {@link #serviceMetaObject} based on {@link ServiceMeta} list. + * @param serviceMetaList list needed for initialization + */ + private static void initServiceMetaObject(List serviceMetaList) { + serviceMetaObject = new ServiceMetaObject(); + Collections.sort(serviceMetaList); + serviceMetaObject.setServiceMetaList(serviceMetaList); + String meta = JSON.toJSONString(serviceMetaList); + serviceMetaObject.setMeta(meta); + String md5 = DigestUtils.md5Hex(meta.getBytes(StandardCharsets.UTF_8)); + serviceMetaObject.setMd5OfList(md5); + } + + /** + * Collect {@link ServiceMeta} into the given serviceMetaList according to + * each item of the given urlPatterns and the given resourceActiveType, + * finally determine whether hasWildChar is a new wildChar. + * @param serviceMetaList extended list + * @param hasWildChar keyword to be determined + * @param urlPatterns looped list + * @param resourceActiveType attribute of {@link ServiceMeta} + * @return is new wildChar + */ + private static boolean collectServiceMetas(List serviceMetaList, boolean hasWildChar, + Collection urlPatterns, String resourceActiveType) { + for (String urlPattern : urlPatterns) { + if (MATCH_ALL.equalsIgnoreCase(urlPattern)) { + hasWildChar = true; + } + collectServiceMeta(serviceMetaList, urlPattern, resourceActiveType); + } + return hasWildChar; + } + + /** + * Collect {@link ServiceMeta} into the given serviceMetaList according to + * the given urlPattern and the given resourceActiveType. + * @param serviceMetaList extended list + * @param urlPattern attribute of {@link ServiceMeta} + * @param resourceActiveType attribute of {@link ServiceMeta} + */ + private static void collectServiceMeta(List serviceMetaList, String urlPattern, + String resourceActiveType) { + ServiceMeta serviceMeta = new ServiceMeta(urlPattern, resourceActiveType); + serviceMetaList.add(serviceMeta); } public static ServiceMetaObject getServiceMetaObject() {