This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 0f4d00892 [SCB-2785]support spring boot auto configure and remove 
component scan (#3684)
0f4d00892 is described below

commit 0f4d0089232238abfdb357bf3c872fabcbb9d5c4
Author: liubao68 <[email protected]>
AuthorDate: Mon Feb 27 19:38:08 2023 +0800

    [SCB-2785]support spring boot auto configure and remove component scan 
(#3684)
---
 .../common/rest/CommonRestConfiguration.java       | 80 ++++++++++++++++++++++
 .../common/rest/codec/query/QueryCodecCsv.java     |  3 -
 .../common/rest/codec/query/QueryCodecJson.java    |  2 -
 .../common/rest/codec/query/QueryCodecMulti.java   |  2 -
 .../common/rest/codec/query/QueryCodecPipes.java   |  3 -
 .../common/rest/codec/query/QueryCodecSsv.java     |  3 -
 .../common/rest/codec/query/QueryCodecTsv.java     |  3 -
 .../common/rest/codec/query/QueryCodecs.java       |  2 -
 .../common/rest/codec/query/QueryCodecsUtils.java  |  3 -
 .../rest/filter/inner/RestServerCodecFilter.java   |  2 -
 .../src/main/resources/META-INF/spring.factories   | 18 +++++
 .../servicecomb/edge/core/EdgeAddHeaderFilter.java |  2 -
 .../servicecomb/edge/core/EdgeBootListener.java    |  2 -
 .../edge/core/EdgeCoreConfiguration.java           | 24 ++++---
 .../edge/core/EdgeServerCodecFilter.java           |  2 -
 .../src/main/resources/META-INF/spring.factories   | 18 +++++
 ...ion.java => GovernanceCommonConfiguration.java} |  2 +-
 ...Matcher.java => RouterCommonConfiguration.java} | 37 +++++-----
 .../apache/servicecomb/router/RouterFilter.java    |  4 --
 .../servicecomb/router/cache/RouterRuleCache.java  |  4 --
 .../router/match/RouterRuleMatcher.java            |  4 --
 .../src/main/resources/META-INF/spring.factories   | 19 +++++
 .../governance/BulkheadHandlerTest.java            |  2 +-
 .../servicecomb/governance/CustomMatchTest.java    |  2 +-
 .../servicecomb/governance/FaultInjectionTest.java |  2 +-
 .../servicecomb/governance/FlowControlTest.java    |  2 +-
 .../governance/GovernanceCacheHandlerTest.java     |  2 +-
 .../governance/GovernancePropertiesTest.java       |  2 +-
 .../IdentifierRateLimitingHandlerTest.java         |  2 +-
 .../governance/InstanceBulkheadHandlerTest.java    |  2 +-
 .../governance/InstanceIsolationTest.java          |  2 +-
 .../servicecomb/governance/LoadBalancerTest.java   |  2 +-
 .../apache/servicecomb/governance/MapperTest.java  |  2 +-
 .../servicecomb/governance/OperatorTest.java       |  2 +-
 .../governance/TimeLimiterHandlerTest.java         |  2 +-
 35 files changed, 182 insertions(+), 83 deletions(-)

diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/CommonRestConfiguration.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/CommonRestConfiguration.java
new file mode 100644
index 000000000..a52954190
--- /dev/null
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/CommonRestConfiguration.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.common.rest;
+
+import java.util.List;
+
+import org.apache.servicecomb.common.rest.codec.query.QueryCodec;
+import org.apache.servicecomb.common.rest.codec.query.QueryCodecCsv;
+import org.apache.servicecomb.common.rest.codec.query.QueryCodecJson;
+import org.apache.servicecomb.common.rest.codec.query.QueryCodecMulti;
+import org.apache.servicecomb.common.rest.codec.query.QueryCodecPipes;
+import org.apache.servicecomb.common.rest.codec.query.QueryCodecSsv;
+import org.apache.servicecomb.common.rest.codec.query.QueryCodecTsv;
+import org.apache.servicecomb.common.rest.codec.query.QueryCodecs;
+import org.apache.servicecomb.common.rest.codec.query.QueryCodecsUtils;
+import org.apache.servicecomb.common.rest.filter.inner.RestServerCodecFilter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class CommonRestConfiguration {
+  @Bean
+  public QueryCodecCsv queryCodecCsv() {
+    return new QueryCodecCsv();
+  }
+
+  @Bean
+  public QueryCodecTsv queryCodecTsv() {
+    return new QueryCodecTsv();
+  }
+
+  @Bean
+  public QueryCodecSsv queryCodecSsv() {
+    return new QueryCodecSsv();
+  }
+
+  @Bean
+  public QueryCodecPipes queryCodecPipes() {
+    return new QueryCodecPipes();
+  }
+
+  @Bean
+  public QueryCodecMulti queryCodecMulti() {
+    return new QueryCodecMulti();
+  }
+
+  @Bean
+  public QueryCodecJson queryCodecJson() {
+    return new QueryCodecJson();
+  }
+
+  @Bean
+  public QueryCodecsUtils queryCodecsUtils(QueryCodecs queryCodecs) {
+    return new QueryCodecsUtils(queryCodecs);
+  }
+
+  @Bean
+  public RestServerCodecFilter restServerCodecFilter() {
+    return new RestServerCodecFilter();
+  }
+
+  @Bean
+  public QueryCodecs queryCodecs(List<QueryCodec> orderedCodecs) {
+    return new QueryCodecs(orderedCodecs);
+  }
+}
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecCsv.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecCsv.java
index 706835b53..12e1a6351 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecCsv.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecCsv.java
@@ -16,9 +16,6 @@
  */
 package org.apache.servicecomb.common.rest.codec.query;
 
-import org.springframework.stereotype.Component;
-
-@Component
 public class QueryCodecCsv extends QueryCodecWithDelimiter {
   public static final String CODEC_NAME = "csv";
 
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecJson.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecJson.java
index ccf489273..d46c28e2f 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecJson.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecJson.java
@@ -25,13 +25,11 @@ import 
org.apache.servicecomb.common.rest.codec.param.QueryProcessorCreator.Quer
 import 
org.apache.servicecomb.common.rest.definition.path.URLPathBuilder.URLPathStringBuilder;
 import org.apache.servicecomb.core.exception.ExceptionCodes;
 import org.apache.servicecomb.core.exception.Exceptions;
-import org.springframework.stereotype.Component;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JavaType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
-@Component
 public class QueryCodecJson implements QueryCodec {
   public static final String CODEC_NAME = "json";
 
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecMulti.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecMulti.java
index 2a0c19163..49db89b53 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecMulti.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecMulti.java
@@ -23,9 +23,7 @@ import javax.servlet.http.HttpServletRequest;
 
 import 
org.apache.servicecomb.common.rest.codec.param.QueryProcessorCreator.QueryProcessor;
 import 
org.apache.servicecomb.common.rest.definition.path.URLPathBuilder.URLPathStringBuilder;
-import org.springframework.stereotype.Component;
 
-@Component
 public class QueryCodecMulti extends AbstractQueryCodec {
   public static final String CODEC_NAME = "multi";
 
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecPipes.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecPipes.java
index 2a5160d3a..cf679bca0 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecPipes.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecPipes.java
@@ -16,9 +16,6 @@
  */
 package org.apache.servicecomb.common.rest.codec.query;
 
-import org.springframework.stereotype.Component;
-
-@Component
 public class QueryCodecPipes extends QueryCodecWithDelimiter {
   public static final String CODEC_NAME = "pipes";
 
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecSsv.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecSsv.java
index 5c230d0cd..c2e56ff72 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecSsv.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecSsv.java
@@ -16,9 +16,6 @@
  */
 package org.apache.servicecomb.common.rest.codec.query;
 
-import org.springframework.stereotype.Component;
-
-@Component
 public class QueryCodecSsv extends QueryCodecWithDelimiter {
   public static final String CODEC_NAME = "ssv";
 
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecTsv.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecTsv.java
index ee834f8b2..34558d944 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecTsv.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecTsv.java
@@ -16,9 +16,6 @@
  */
 package org.apache.servicecomb.common.rest.codec.query;
 
-import org.springframework.stereotype.Component;
-
-@Component
 public class QueryCodecTsv extends QueryCodecWithDelimiter {
   public static final String CODEC_NAME = "tsv";
 
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecs.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecs.java
index 6be3c775b..7ab2c1603 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecs.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecs.java
@@ -26,9 +26,7 @@ import javax.annotation.Nullable;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
 
-@Component
 public class QueryCodecs {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(QueryCodecs.class);
 
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecsUtils.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecsUtils.java
index d66a6d84c..f4aa30d44 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecsUtils.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecsUtils.java
@@ -19,9 +19,6 @@ package org.apache.servicecomb.common.rest.codec.query;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import org.springframework.stereotype.Component;
-
-@Component
 public class QueryCodecsUtils {
   // create a default instance, so that more friendly to UT
   private static QueryCodecs queryCodecs = QueryCodecs.createForTest();
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/RestServerCodecFilter.java
 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/RestServerCodecFilter.java
index 4d101e9ff..4045ba9cc 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/RestServerCodecFilter.java
+++ 
b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/RestServerCodecFilter.java
@@ -45,12 +45,10 @@ import 
org.apache.servicecomb.foundation.vertx.http.HttpServletResponseEx;
 import org.apache.servicecomb.foundation.vertx.stream.BufferOutputStream;
 import org.apache.servicecomb.swagger.invocation.InvocationType;
 import org.apache.servicecomb.swagger.invocation.Response;
-import org.springframework.stereotype.Component;
 
 import io.netty.buffer.Unpooled;
 import io.vertx.core.MultiMap;
 
-@Component
 public class RestServerCodecFilter implements ProducerFilter {
   public static final String NAME = "rest-server-codec";
 
diff --git a/common/common-rest/src/main/resources/META-INF/spring.factories 
b/common/common-rest/src/main/resources/META-INF/spring.factories
new file mode 100644
index 000000000..ce480f632
--- /dev/null
+++ b/common/common-rest/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+  org.apache.servicecomb.common.rest.CommonRestConfiguration
diff --git 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeAddHeaderFilter.java
 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeAddHeaderFilter.java
index 1d88a7c67..8962ed181 100644
--- 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeAddHeaderFilter.java
+++ 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeAddHeaderFilter.java
@@ -27,9 +27,7 @@ import org.apache.servicecomb.core.filter.FilterNode;
 import org.apache.servicecomb.swagger.invocation.InvocationType;
 import org.apache.servicecomb.swagger.invocation.Response;
 import org.apache.servicecomb.transport.rest.client.RestClientTransportContext;
-import org.springframework.stereotype.Component;
 
-@Component
 public class EdgeAddHeaderFilter implements ConsumerFilter {
   public static final String NAME = "edge-add-headers";
 
diff --git 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeBootListener.java
 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeBootListener.java
index 55ee39261..c4a5ff4c6 100644
--- 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeBootListener.java
+++ 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeBootListener.java
@@ -24,11 +24,9 @@ import 
org.apache.servicecomb.transport.rest.client.TransportClientConfig;
 import org.apache.servicecomb.transport.rest.vertx.TransportConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Component;
 
 import com.netflix.config.DynamicPropertyFactory;
 
-@Component
 public class EdgeBootListener implements BootListener {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(EdgeBootListener.class);
 
diff --git 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecCsv.java
 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeCoreConfiguration.java
similarity index 61%
copy from 
common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecCsv.java
copy to 
edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeCoreConfiguration.java
index 706835b53..e6cb427ee 100644
--- 
a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecCsv.java
+++ 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeCoreConfiguration.java
@@ -14,17 +14,25 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicecomb.common.rest.codec.query;
+package org.apache.servicecomb.edge.core;
 
-import org.springframework.stereotype.Component;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
 
-@Component
-public class QueryCodecCsv extends QueryCodecWithDelimiter {
-  public static final String CODEC_NAME = "csv";
+@Configuration
+public class EdgeCoreConfiguration {
+  @Bean
+  public EdgeBootListener edgeBootListener() {
+    return new EdgeBootListener();
+  }
 
-  public static final String DELIMITER = ",";
+  @Bean
+  public EdgeServerCodecFilter edgeServerCodecFilter() {
+    return new EdgeServerCodecFilter();
+  }
 
-  public QueryCodecCsv() {
-    super(CODEC_NAME, DELIMITER, DELIMITER);
+  @Bean
+  public EdgeAddHeaderFilter edgeAddHeaderFilter() {
+    return new EdgeAddHeaderFilter();
   }
 }
diff --git 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeServerCodecFilter.java
 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeServerCodecFilter.java
index 54b2759ad..c6b01d614 100644
--- 
a/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeServerCodecFilter.java
+++ 
b/edge/edge-core/src/main/java/org/apache/servicecomb/edge/core/EdgeServerCodecFilter.java
@@ -27,9 +27,7 @@ import org.apache.servicecomb.core.filter.FilterNode;
 import org.apache.servicecomb.swagger.invocation.InvocationType;
 import org.apache.servicecomb.swagger.invocation.Response;
 import org.apache.servicecomb.swagger.invocation.context.TransportContext;
-import org.springframework.stereotype.Component;
 
-@Component
 public class EdgeServerCodecFilter extends RestServerCodecFilter {
   public static final String NAME = "edge-server-codec";
 
diff --git a/edge/edge-core/src/main/resources/META-INF/spring.factories 
b/edge/edge-core/src/main/resources/META-INF/spring.factories
new file mode 100644
index 000000000..c927186a4
--- /dev/null
+++ b/edge/edge-core/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+  org.apache.servicecomb.edge.core.EdgeCoreConfiguration
diff --git 
a/governance/src/main/java/org/apache/servicecomb/governance/GovernanceConfiguration.java
 
b/governance/src/main/java/org/apache/servicecomb/governance/GovernanceCommonConfiguration.java
similarity index 99%
rename from 
governance/src/main/java/org/apache/servicecomb/governance/GovernanceConfiguration.java
rename to 
governance/src/main/java/org/apache/servicecomb/governance/GovernanceCommonConfiguration.java
index 2b06b2172..bd3929ad6 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/governance/GovernanceConfiguration.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/governance/GovernanceCommonConfiguration.java
@@ -63,7 +63,7 @@ import org.springframework.context.annotation.Configuration;
 import io.micrometer.core.instrument.MeterRegistry;
 
 @Configuration
-public class GovernanceConfiguration {
+public class GovernanceCommonConfiguration {
   // properties configuration
   @Bean
   public BulkheadProperties bulkheadProperties() {
diff --git 
a/governance/src/main/java/org/apache/servicecomb/router/match/RouterRuleMatcher.java
 
b/governance/src/main/java/org/apache/servicecomb/router/RouterCommonConfiguration.java
similarity index 52%
copy from 
governance/src/main/java/org/apache/servicecomb/router/match/RouterRuleMatcher.java
copy to 
governance/src/main/java/org/apache/servicecomb/router/RouterCommonConfiguration.java
index a47da12bd..4b11c5481 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/router/match/RouterRuleMatcher.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/router/RouterCommonConfiguration.java
@@ -14,31 +14,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicecomb.router.match;
-
-import java.util.Map;
+package org.apache.servicecomb.router;
 
 import org.apache.servicecomb.router.cache.RouterRuleCache;
-import org.apache.servicecomb.router.model.PolicyRuleItem;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
+import org.apache.servicecomb.router.match.RouterRuleMatcher;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
 
-@Component
-public class RouterRuleMatcher {
-  private final RouterRuleCache routerRuleCache;
+@Configuration
+public class RouterCommonConfiguration {
+  @Bean
+  public RouterRuleCache routerRuleCache(Environment environment) {
+    return new RouterRuleCache(environment);
+  }
 
-  @Autowired
-  public RouterRuleMatcher(RouterRuleCache routerRuleCache) {
-    this.routerRuleCache = routerRuleCache;
+  @Bean
+  public RouterRuleMatcher routerRuleMatcher(RouterRuleCache routerRuleCache) {
+    return new RouterRuleMatcher(routerRuleCache);
   }
 
-  public PolicyRuleItem match(String serviceName, Map<String, String> 
invokeHeader) {
-    for (PolicyRuleItem rule : 
routerRuleCache.getServiceInfoCacheMap().get(serviceName)
-        .getAllrule()) {
-      if (rule.getMatch() == null || rule.getMatch().match(invokeHeader)) {
-        return rule;
-      }
-    }
-    return null;
+  @Bean
+  public RouterFilter routerFilter(RouterRuleMatcher routerRuleMatcher, 
RouterRuleCache routerRuleCache) {
+    return new RouterFilter(routerRuleMatcher, routerRuleCache);
   }
 }
diff --git 
a/governance/src/main/java/org/apache/servicecomb/router/RouterFilter.java 
b/governance/src/main/java/org/apache/servicecomb/router/RouterFilter.java
index 7e48b9c00..a6ec35d76 100644
--- a/governance/src/main/java/org/apache/servicecomb/router/RouterFilter.java
+++ b/governance/src/main/java/org/apache/servicecomb/router/RouterFilter.java
@@ -26,11 +26,8 @@ import org.apache.servicecomb.router.match.RouterRuleMatcher;
 import org.apache.servicecomb.router.model.PolicyRuleItem;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
-@Component
 public class RouterFilter {
 
   private static final Logger LOGGER = 
LoggerFactory.getLogger(RouterFilter.class);
@@ -39,7 +36,6 @@ public class RouterFilter {
 
   private final RouterRuleCache routerRuleCache;
 
-  @Autowired
   public RouterFilter(RouterRuleMatcher routerRuleMatcher, RouterRuleCache 
routerRuleCache) {
     this.routerRuleMatcher = routerRuleMatcher;
     this.routerRuleCache = routerRuleCache;
diff --git 
a/governance/src/main/java/org/apache/servicecomb/router/cache/RouterRuleCache.java
 
b/governance/src/main/java/org/apache/servicecomb/router/cache/RouterRuleCache.java
index 8ff480cea..018d48ec5 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/router/cache/RouterRuleCache.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/router/cache/RouterRuleCache.java
@@ -27,9 +27,7 @@ import org.apache.servicecomb.router.model.PolicyRuleItem;
 import org.apache.servicecomb.router.model.ServiceInfoCache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
-import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.LoaderOptions;
@@ -41,7 +39,6 @@ import org.yaml.snakeyaml.representer.Representer;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.eventbus.Subscribe;
 
-@Component
 public class RouterRuleCache {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(RouterRuleCache.class);
 
@@ -57,7 +54,6 @@ public class RouterRuleCache {
 
   private final Representer representer = new Representer(new DumperOptions());
 
-  @Autowired
   public RouterRuleCache(Environment environment) {
     this.environment = environment;
     representer.getPropertyUtils().setSkipMissingProperties(true);
diff --git 
a/governance/src/main/java/org/apache/servicecomb/router/match/RouterRuleMatcher.java
 
b/governance/src/main/java/org/apache/servicecomb/router/match/RouterRuleMatcher.java
index a47da12bd..a7fcb0f28 100644
--- 
a/governance/src/main/java/org/apache/servicecomb/router/match/RouterRuleMatcher.java
+++ 
b/governance/src/main/java/org/apache/servicecomb/router/match/RouterRuleMatcher.java
@@ -20,14 +20,10 @@ import java.util.Map;
 
 import org.apache.servicecomb.router.cache.RouterRuleCache;
 import org.apache.servicecomb.router.model.PolicyRuleItem;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
 
-@Component
 public class RouterRuleMatcher {
   private final RouterRuleCache routerRuleCache;
 
-  @Autowired
   public RouterRuleMatcher(RouterRuleCache routerRuleCache) {
     this.routerRuleCache = routerRuleCache;
   }
diff --git a/governance/src/main/resources/META-INF/spring.factories 
b/governance/src/main/resources/META-INF/spring.factories
new file mode 100644
index 000000000..2a3f4f6e7
--- /dev/null
+++ b/governance/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+  org.apache.servicecomb.governance.GovernanceCommonConfiguration,\
+  org.apache.servicecomb.router.RouterCommonConfiguration
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/BulkheadHandlerTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/BulkheadHandlerTest.java
index a5d429cc4..4e77fa900 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/BulkheadHandlerTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/BulkheadHandlerTest.java
@@ -27,7 +27,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ContextConfiguration;
 
 @SpringBootTest
-@ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class})
+@ContextConfiguration(classes = {GovernanceCommonConfiguration.class, 
MockConfiguration.class})
 public class BulkheadHandlerTest {
   private BulkheadHandler bulkheadHandler;
 
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/CustomMatchTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/CustomMatchTest.java
index 126db5766..92890baa6 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/CustomMatchTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/CustomMatchTest.java
@@ -30,7 +30,7 @@ import org.springframework.test.context.ContextConfiguration;
 import org.junit.jupiter.api.Assertions;
 
 @SpringBootTest
-@ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class, MockConfigurationForCustomMatcher.class})
+@ContextConfiguration(classes = {GovernanceCommonConfiguration.class, 
MockConfiguration.class, MockConfigurationForCustomMatcher.class})
 public class CustomMatchTest {
 
     private RequestProcessor requestProcessor;
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/FaultInjectionTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/FaultInjectionTest.java
index ce343ff26..919f260d0 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/FaultInjectionTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/FaultInjectionTest.java
@@ -35,7 +35,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ContextConfiguration;
 
 @SpringBootTest
-@ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class})
+@ContextConfiguration(classes = {GovernanceCommonConfiguration.class, 
MockConfiguration.class})
 public class FaultInjectionTest {
   private FaultInjectionHandler faultInjectionHandler;
 
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/FlowControlTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/FlowControlTest.java
index c649e21cf..a4b751fd9 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/FlowControlTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/FlowControlTest.java
@@ -35,7 +35,7 @@ import io.github.resilience4j.ratelimiter.RateLimiter;
 import io.github.resilience4j.ratelimiter.RequestNotPermitted;
 
 @SpringBootTest
-@ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class})
+@ContextConfiguration(classes = {GovernanceCommonConfiguration.class, 
MockConfiguration.class})
 public class FlowControlTest {
   private RateLimitingHandler rateLimitingHandler;
 
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/GovernanceCacheHandlerTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/GovernanceCacheHandlerTest.java
index 38ad5e199..ac26c3f3b 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/GovernanceCacheHandlerTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/GovernanceCacheHandlerTest.java
@@ -28,7 +28,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ContextConfiguration;
 
 @SpringBootTest
-@ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class})
+@ContextConfiguration(classes = {GovernanceCommonConfiguration.class, 
MockConfiguration.class})
 public class GovernanceCacheHandlerTest {
   private GovernanceCacheHandler<String, Object> governanceCacheHandler;
 
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java
index d24329956..4f12dec62 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java
@@ -59,7 +59,7 @@ import org.springframework.core.env.Environment;
 import org.springframework.test.context.ContextConfiguration;
 
 @SpringBootTest
-@ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class})
+@ContextConfiguration(classes = {GovernanceCommonConfiguration.class, 
MockConfiguration.class})
 public class GovernancePropertiesTest {
   private List<GovernanceProperties<? extends AbstractPolicy>> propertiesList;
 
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/IdentifierRateLimitingHandlerTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/IdentifierRateLimitingHandlerTest.java
index 288aa7bbb..1aed8e4a3 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/IdentifierRateLimitingHandlerTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/IdentifierRateLimitingHandlerTest.java
@@ -37,7 +37,7 @@ import io.github.resilience4j.ratelimiter.RateLimiter;
 import io.github.resilience4j.ratelimiter.RequestNotPermitted;
 
 @SpringBootTest
-@ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class})
+@ContextConfiguration(classes = {GovernanceCommonConfiguration.class, 
MockConfiguration.class})
 public class IdentifierRateLimitingHandlerTest {
   private IdentifierRateLimitingHandler rateLimitingHandler;
 
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/InstanceBulkheadHandlerTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/InstanceBulkheadHandlerTest.java
index f815db3e2..de5213ef5 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/InstanceBulkheadHandlerTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/InstanceBulkheadHandlerTest.java
@@ -37,7 +37,7 @@ import io.github.resilience4j.decorators.Decorators;
 import io.github.resilience4j.decorators.Decorators.DecorateCheckedSupplier;
 
 @SpringBootTest
-@ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class})
+@ContextConfiguration(classes = {GovernanceCommonConfiguration.class, 
MockConfiguration.class})
 public class InstanceBulkheadHandlerTest {
   private InstanceBulkheadHandler instanceBulkheadHandler;
 
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
index d8a7e7299..1ee952780 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
@@ -36,7 +36,7 @@ import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.prometheus.PrometheusMeterRegistry;
 
 @SpringBootTest
-@ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class})
+@ContextConfiguration(classes = {GovernanceCommonConfiguration.class, 
MockConfiguration.class})
 public class InstanceIsolationTest {
   private InstanceIsolationHandler instanceIsolationHandler;
 
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/LoadBalancerTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/LoadBalancerTest.java
index 2a5fb0645..9973cbc56 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/LoadBalancerTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/LoadBalancerTest.java
@@ -27,7 +27,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ContextConfiguration;
 
 @SpringBootTest
-@ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class})
+@ContextConfiguration(classes = {GovernanceCommonConfiguration.class, 
MockConfiguration.class})
 public class LoadBalancerTest {
   private LoadBalanceHandler loadBalanceHandler;
 
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/MapperTest.java 
b/governance/src/test/java/org/apache/servicecomb/governance/MapperTest.java
index 222af7f0e..176e25030 100644
--- a/governance/src/test/java/org/apache/servicecomb/governance/MapperTest.java
+++ b/governance/src/test/java/org/apache/servicecomb/governance/MapperTest.java
@@ -28,7 +28,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ContextConfiguration;
 
 @SpringBootTest
-@ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class})
+@ContextConfiguration(classes = {GovernanceCommonConfiguration.class, 
MockConfiguration.class})
 public class MapperTest {
   private MapperHandler mapperHandler;
 
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/OperatorTest.java 
b/governance/src/test/java/org/apache/servicecomb/governance/OperatorTest.java
index 25a8490d4..7c0670acb 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/OperatorTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/OperatorTest.java
@@ -34,7 +34,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ContextConfiguration;
 
 @SpringBootTest
-@ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class})
+@ContextConfiguration(classes = {GovernanceCommonConfiguration.class, 
MockConfiguration.class})
 public class OperatorTest {
   private RequestProcessor requestProcessor;
 
diff --git 
a/governance/src/test/java/org/apache/servicecomb/governance/TimeLimiterHandlerTest.java
 
b/governance/src/test/java/org/apache/servicecomb/governance/TimeLimiterHandlerTest.java
index dbefeba6b..742c71184 100644
--- 
a/governance/src/test/java/org/apache/servicecomb/governance/TimeLimiterHandlerTest.java
+++ 
b/governance/src/test/java/org/apache/servicecomb/governance/TimeLimiterHandlerTest.java
@@ -30,7 +30,7 @@ import org.springframework.test.context.ContextConfiguration;
 import io.github.resilience4j.timelimiter.TimeLimiter;
 
 @SpringBootTest
-@ContextConfiguration(classes = {GovernanceConfiguration.class, 
MockConfiguration.class})
+@ContextConfiguration(classes = {GovernanceCommonConfiguration.class, 
MockConfiguration.class})
 public class TimeLimiterHandlerTest {
   private TimeLimiterHandler timeLimiterHandler;
 


Reply via email to