You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by si...@apache.org on 2019/12/10 04:24:12 UTC

[pulsar-manager] branch master updated: Switch from field injection to constructor injection for beans (#230)

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

sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar-manager.git


The following commit(s) were added to refs/heads/master by this push:
     new 55693a2  Switch from field injection to constructor injection for beans (#230)
55693a2 is described below

commit 55693a2531d82c2466ebc972ae1d6599a9d34a92
Author: Sergii Zhevzhyk <vz...@users.noreply.github.com>
AuthorDate: Tue Dec 10 05:23:58 2019 +0100

    Switch from field injection to constructor injection for beans (#230)
    
    ## Motivation
    
    Field injection is not recommended in Spring (for example, IntelliJ shows a warning). There are a couple of articles and discussions showing the advantages of Constructor-based dependency injection and Setter-based dependency injection. For this project, I recommend switching from Field-based dependency injection to Constructor-based injection. It should bring better testability, immutability, and show problems in design.
    
    ## Change
    
    Initialization of all fields which were injected with the `@Autowired` annotation was moved to constructors.
---
 .../manager/controller/BookiesController.java      |  6 ++-
 .../manager/controller/BrokerStatsController.java  | 17 ++++---
 .../manager/controller/BrokerTokensController.java |  9 ++--
 .../manager/controller/BrokersController.java      | 17 ++++---
 .../manager/controller/ClustersController.java     | 17 ++++---
 .../manager/controller/EnvironmentsController.java | 13 +++--
 .../pulsar/manager/controller/LoginController.java |  6 ++-
 .../manager/controller/NamespacesController.java   | 17 ++++---
 .../manager/controller/TenantsController.java      | 17 ++++---
 .../ThirdPartyLoginCallbackController.java         |  6 ++-
 .../manager/controller/TopicsController.java       | 17 ++++---
 .../interceptor/AdminHandlerInterceptor.java       |  9 ++--
 .../service/impl/BrokerStatsServiceImpl.java       | 56 +++++++++++-----------
 .../manager/service/impl/ClustersServiceImpl.java  |  6 ++-
 .../service/impl/EnvironmentCacheServiceImpl.java  |  8 ++--
 .../service/impl/NamespacesServiceImpl.java        | 11 +++--
 .../manager/service/impl/TopicsServiceImpl.java    | 12 ++---
 .../pulsar/manager/zuul/EnvironmentForward.java    |  9 +++-
 .../zuul/LocationHeaderRewritingFilter.java        | 11 +++--
 19 files changed, 169 insertions(+), 95 deletions(-)

diff --git a/src/main/java/org/apache/pulsar/manager/controller/BookiesController.java b/src/main/java/org/apache/pulsar/manager/controller/BookiesController.java
index 7794659..c42f9ac 100644
--- a/src/main/java/org/apache/pulsar/manager/controller/BookiesController.java
+++ b/src/main/java/org/apache/pulsar/manager/controller/BookiesController.java
@@ -34,8 +34,12 @@ import java.util.Map;
 @Validated
 public class BookiesController {
 
+    private final BookiesService bookiesService;
+
     @Autowired
-    private BookiesService bookiesService;
+    public BookiesController(BookiesService bookiesService) {
+        this.bookiesService = bookiesService;
+    }
 
     @ApiOperation(value = "Get the list of existing bookies, support paging, the default is 10 per page")
     @ApiResponses({
diff --git a/src/main/java/org/apache/pulsar/manager/controller/BrokerStatsController.java b/src/main/java/org/apache/pulsar/manager/controller/BrokerStatsController.java
index 0f75bf3..5f06089 100644
--- a/src/main/java/org/apache/pulsar/manager/controller/BrokerStatsController.java
+++ b/src/main/java/org/apache/pulsar/manager/controller/BrokerStatsController.java
@@ -38,14 +38,19 @@ import javax.servlet.http.HttpServletRequest;
 @RestController
 public class BrokerStatsController {
 
-    @Autowired
-    private BrokerStatsService brokerStatsService;
-
-    @Autowired
-    private EnvironmentCacheService environmentCacheService;
+    private final BrokerStatsService brokerStatsService;
+    private final EnvironmentCacheService environmentCacheService;
+    private final HttpServletRequest request;
 
     @Autowired
-    private HttpServletRequest request;
+    public BrokerStatsController(
+            BrokerStatsService brokerStatsService,
+            EnvironmentCacheService environmentCacheService,
+            HttpServletRequest request) {
+        this.brokerStatsService = brokerStatsService;
+        this.environmentCacheService = environmentCacheService;
+        this.request = request;
+    }
 
     @ApiOperation(value = "Get the broker stats metrics")
     @ApiResponses({
diff --git a/src/main/java/org/apache/pulsar/manager/controller/BrokerTokensController.java b/src/main/java/org/apache/pulsar/manager/controller/BrokerTokensController.java
index ab3296d..7cb973b 100644
--- a/src/main/java/org/apache/pulsar/manager/controller/BrokerTokensController.java
+++ b/src/main/java/org/apache/pulsar/manager/controller/BrokerTokensController.java
@@ -38,11 +38,14 @@ import java.util.Optional;
 @RestController
 public class BrokerTokensController {
 
-    @Autowired
-    private JwtService jwtService;
+    private final JwtService jwtService;
+    private final BrokerTokensRepository brokerTokensRepository;
 
     @Autowired
-    private BrokerTokensRepository brokerTokensRepository;
+    public BrokerTokensController(JwtService jwtService, BrokerTokensRepository brokerTokensRepository) {
+        this.jwtService = jwtService;
+        this.brokerTokensRepository = brokerTokensRepository;
+    }
 
     @ApiOperation(value = "Get the list of existing broker tokens, support paging, the default is 10 per page")
     @ApiResponses({
diff --git a/src/main/java/org/apache/pulsar/manager/controller/BrokersController.java b/src/main/java/org/apache/pulsar/manager/controller/BrokersController.java
index 6b4a3c1..473c438 100644
--- a/src/main/java/org/apache/pulsar/manager/controller/BrokersController.java
+++ b/src/main/java/org/apache/pulsar/manager/controller/BrokersController.java
@@ -43,14 +43,19 @@ import java.util.Map;
 @RestController
 public class BrokersController {
 
-    @Autowired
-    private BrokersService brokersService;
-
-    @Autowired
-    private HttpServletRequest request;
+    private final BrokersService brokersService;
+    private final HttpServletRequest request;
+    private final EnvironmentCacheService environmentCacheService;
 
     @Autowired
-    private EnvironmentCacheService environmentCacheService;
+    public BrokersController(
+            BrokersService brokersService,
+            HttpServletRequest request,
+            EnvironmentCacheService environmentCacheService) {
+        this.brokersService = brokersService;
+        this.request = request;
+        this.environmentCacheService = environmentCacheService;
+    }
 
     @ApiOperation(value = "Get the list of existing brokers, support paging, the default is 10 per page")
     @ApiResponses({
diff --git a/src/main/java/org/apache/pulsar/manager/controller/ClustersController.java b/src/main/java/org/apache/pulsar/manager/controller/ClustersController.java
index 446ba13..92a3beb 100644
--- a/src/main/java/org/apache/pulsar/manager/controller/ClustersController.java
+++ b/src/main/java/org/apache/pulsar/manager/controller/ClustersController.java
@@ -42,14 +42,19 @@ import java.util.Map;
 @Validated
 public class ClustersController {
 
-    @Autowired
-    private ClustersService clusterService;
-
-    @Autowired
-    private EnvironmentCacheService environmentCacheService;
+    private final ClustersService clusterService;
+    private final EnvironmentCacheService environmentCacheService;
+    private final HttpServletRequest request;
 
     @Autowired
-    private HttpServletRequest request;
+    public ClustersController(
+            ClustersService clusterService,
+            EnvironmentCacheService environmentCacheService,
+            HttpServletRequest request) {
+        this.clusterService = clusterService;
+        this.environmentCacheService = environmentCacheService;
+        this.request = request;
+    }
 
     @ApiOperation(value = "Get the list of existing clusters, support paging, the default is 10 per page")
     @ApiResponses({
diff --git a/src/main/java/org/apache/pulsar/manager/controller/EnvironmentsController.java b/src/main/java/org/apache/pulsar/manager/controller/EnvironmentsController.java
index 56d56aa..f5a40b7 100644
--- a/src/main/java/org/apache/pulsar/manager/controller/EnvironmentsController.java
+++ b/src/main/java/org/apache/pulsar/manager/controller/EnvironmentsController.java
@@ -49,14 +49,19 @@ import java.util.Optional;
 @RestController
 public class EnvironmentsController {
 
-    @Autowired
-    private EnvironmentsRepository environmentsRepository;
-
     @Value("${backend.jwt.token}")
     private String pulsarJwtToken;
 
+    private final EnvironmentsRepository environmentsRepository;
+    private final EnvironmentCacheService environmentCacheService;
+
     @Autowired
-    private EnvironmentCacheService environmentCacheService;
+    public EnvironmentsController(
+            EnvironmentsRepository environmentsRepository,
+            EnvironmentCacheService environmentCacheService) {
+        this.environmentsRepository = environmentsRepository;
+        this.environmentCacheService = environmentCacheService;
+    }
 
     @ApiOperation(value = "Get the list of existing environments, support paging, the default is 10 per page")
     @ApiResponses({
diff --git a/src/main/java/org/apache/pulsar/manager/controller/LoginController.java b/src/main/java/org/apache/pulsar/manager/controller/LoginController.java
index 8f1411e..051881c 100644
--- a/src/main/java/org/apache/pulsar/manager/controller/LoginController.java
+++ b/src/main/java/org/apache/pulsar/manager/controller/LoginController.java
@@ -50,8 +50,12 @@ public class LoginController {
     @Value("${pulsar-manager.password}")
     private String password;
 
+    private final JwtService jwtService;
+
     @Autowired
-    private JwtService jwtService;
+    public LoginController(JwtService jwtService) {
+        this.jwtService = jwtService;
+    }
 
     @ApiOperation(value = "Login pulsar manager")
     @ApiResponses({
diff --git a/src/main/java/org/apache/pulsar/manager/controller/NamespacesController.java b/src/main/java/org/apache/pulsar/manager/controller/NamespacesController.java
index a60e53b..5b88e31 100644
--- a/src/main/java/org/apache/pulsar/manager/controller/NamespacesController.java
+++ b/src/main/java/org/apache/pulsar/manager/controller/NamespacesController.java
@@ -44,14 +44,19 @@ import java.util.Map;
 @RestController
 public class NamespacesController {
 
-    @Autowired
-    private NamespacesService namespacesService;
-
-    @Autowired
-    private EnvironmentCacheService environmentCacheService;
+    private final NamespacesService namespacesService;
+    private final EnvironmentCacheService environmentCacheService;
+    private final HttpServletRequest request;
 
     @Autowired
-    private HttpServletRequest request;
+    public NamespacesController(
+            NamespacesService namespacesService,
+            EnvironmentCacheService environmentCacheService,
+            HttpServletRequest request) {
+        this.namespacesService = namespacesService;
+        this.environmentCacheService = environmentCacheService;
+        this.request = request;
+    }
 
     @ApiOperation(value = "Query list by the name of tenant or namespace, support paging, the default is 10 per page")
     @ApiResponses({
diff --git a/src/main/java/org/apache/pulsar/manager/controller/TenantsController.java b/src/main/java/org/apache/pulsar/manager/controller/TenantsController.java
index 0502575..9fa86d6 100644
--- a/src/main/java/org/apache/pulsar/manager/controller/TenantsController.java
+++ b/src/main/java/org/apache/pulsar/manager/controller/TenantsController.java
@@ -42,14 +42,19 @@ import java.util.Map;
 @Validated
 public class TenantsController {
 
-    @Autowired
-    private TenantsService tenantsService;
-
-    @Autowired
-    private EnvironmentCacheService environmentCacheService;
+    private final TenantsService tenantsService;
+    private final EnvironmentCacheService environmentCacheService;
+    private final HttpServletRequest request;
 
     @Autowired
-    private HttpServletRequest request;
+    public TenantsController(
+            TenantsService tenantsService,
+            EnvironmentCacheService environmentCacheService,
+            HttpServletRequest request) {
+        this.tenantsService = tenantsService;
+        this.environmentCacheService = environmentCacheService;
+        this.request = request;
+    }
 
     @ApiOperation(value = "Get the list of existing tenants, support paging, the default is 10 per page")
     @ApiResponses({
diff --git a/src/main/java/org/apache/pulsar/manager/controller/ThirdPartyLoginCallbackController.java b/src/main/java/org/apache/pulsar/manager/controller/ThirdPartyLoginCallbackController.java
index f9f175d..5093184 100644
--- a/src/main/java/org/apache/pulsar/manager/controller/ThirdPartyLoginCallbackController.java
+++ b/src/main/java/org/apache/pulsar/manager/controller/ThirdPartyLoginCallbackController.java
@@ -57,8 +57,12 @@ public class ThirdPartyLoginCallbackController {
     @Value("${github.redirect.host}")
     private String githubRedirectHost;
 
+    private final ThirdPartyLoginService thirdPartyLoginService;
+
     @Autowired
-    private ThirdPartyLoginService thirdPartyLoginService;
+    public ThirdPartyLoginCallbackController(ThirdPartyLoginService thirdPartyLoginService) {
+        this.thirdPartyLoginService = thirdPartyLoginService;
+    }
 
     @ApiOperation(value = "When use pass github authentication, Github platform will carry code parameter to call " +
             "back this address actively. At this time, we can request token and get user information through " +
diff --git a/src/main/java/org/apache/pulsar/manager/controller/TopicsController.java b/src/main/java/org/apache/pulsar/manager/controller/TopicsController.java
index 3075076..8e94b4d 100644
--- a/src/main/java/org/apache/pulsar/manager/controller/TopicsController.java
+++ b/src/main/java/org/apache/pulsar/manager/controller/TopicsController.java
@@ -43,14 +43,19 @@ import java.util.Map;
 @RestController
 public class TopicsController {
 
-    @Autowired
-    private TopicsService topicsService;
-
-    @Autowired
-    private EnvironmentCacheService environmentCacheService;
+    private final TopicsService topicsService;
+    private final EnvironmentCacheService environmentCacheService;
+    private final HttpServletRequest request;
 
     @Autowired
-    private HttpServletRequest request;
+    public TopicsController(
+            TopicsService topicsService,
+            EnvironmentCacheService environmentCacheService,
+            HttpServletRequest request) {
+        this.topicsService = topicsService;
+        this.environmentCacheService = environmentCacheService;
+        this.request = request;
+    }
 
     @ApiOperation(value = "Query topic info by tenant and namespace")
     @ApiResponses({
diff --git a/src/main/java/org/apache/pulsar/manager/interceptor/AdminHandlerInterceptor.java b/src/main/java/org/apache/pulsar/manager/interceptor/AdminHandlerInterceptor.java
index 3fc8e01..0df5c4d 100644
--- a/src/main/java/org/apache/pulsar/manager/interceptor/AdminHandlerInterceptor.java
+++ b/src/main/java/org/apache/pulsar/manager/interceptor/AdminHandlerInterceptor.java
@@ -32,11 +32,14 @@ import java.util.Optional;
 @Component
 public class AdminHandlerInterceptor extends HandlerInterceptorAdapter {
 
-    @Autowired
-    private JwtService jwtService;
+    private final JwtService jwtService;
+    private final EnvironmentsRepository environmentsRepository;
 
     @Autowired
-    private EnvironmentsRepository environmentsRepository;
+    public AdminHandlerInterceptor(JwtService jwtService, EnvironmentsRepository environmentsRepository) {
+        this.jwtService = jwtService;
+        this.environmentsRepository = environmentsRepository;
+    }
 
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
diff --git a/src/main/java/org/apache/pulsar/manager/service/impl/BrokerStatsServiceImpl.java b/src/main/java/org/apache/pulsar/manager/service/impl/BrokerStatsServiceImpl.java
index 258d924..c44b3cd 100644
--- a/src/main/java/org/apache/pulsar/manager/service/impl/BrokerStatsServiceImpl.java
+++ b/src/main/java/org/apache/pulsar/manager/service/impl/BrokerStatsServiceImpl.java
@@ -59,7 +59,6 @@ public class BrokerStatsServiceImpl implements BrokerStatsService {
 
     private static final Logger log = LoggerFactory.getLogger(BrokerStatsServiceImpl.class);
 
-
     @Value("${backend.directRequestHost}")
     private String directRequestHost;
 
@@ -69,37 +68,40 @@ public class BrokerStatsServiceImpl implements BrokerStatsService {
     @Value("${clear.stats.interval}")
     private Long clearStatsInterval;
 
-    @Autowired
-    private EnvironmentsRepository environmentsRepository;
-
-    @Autowired
-    private ClustersService clustersService;
-
-    @Autowired
-    private BrokersService brokersService;
-
-    @Autowired
-    private TopicsStatsRepository topicsStatsRepository;
-
-    @Autowired
-    private SubscriptionsStatsRepository subscriptionsStatsRepository;
-
-    @Autowired
-    private PublishersStatsRepository publishersStatsRepository;
-
-    @Autowired
-    private ReplicationsStatsRepository replicationsStatsRepository;
-
-    @Autowired
-    private ConsumersStatsRepository consumersStatsRepository;
-
-    @Autowired
-    private EnvironmentCacheService environmentCache;
+    private final EnvironmentsRepository environmentsRepository;
+    private final ClustersService clustersService;
+    private final BrokersService brokersService;
+    private final TopicsStatsRepository topicsStatsRepository;
+    private final SubscriptionsStatsRepository subscriptionsStatsRepository;
+    private final PublishersStatsRepository publishersStatsRepository;
+    private final ReplicationsStatsRepository replicationsStatsRepository;
+    private final ConsumersStatsRepository consumersStatsRepository;
 
     private static final Map<String, String> header = new HashMap<String, String>(){{
         put("Content-Type","application/json");
     }};
 
+    @Autowired
+    public BrokerStatsServiceImpl(
+            EnvironmentsRepository environmentsRepository,
+            ClustersService clustersService,
+            BrokersService brokersService,
+            TopicsStatsRepository topicsStatsRepository,
+            SubscriptionsStatsRepository subscriptionsStatsRepository,
+            PublishersStatsRepository publishersStatsRepository,
+            ReplicationsStatsRepository replicationsStatsRepository,
+            ConsumersStatsRepository consumersStatsRepository,
+            EnvironmentCacheService environmentCache) {
+        this.environmentsRepository = environmentsRepository;
+        this.clustersService = clustersService;
+        this.brokersService = brokersService;
+        this.topicsStatsRepository = topicsStatsRepository;
+        this.subscriptionsStatsRepository = subscriptionsStatsRepository;
+        this.publishersStatsRepository = publishersStatsRepository;
+        this.replicationsStatsRepository = replicationsStatsRepository;
+        this.consumersStatsRepository = consumersStatsRepository;
+    }
+
     public String forwardBrokerStatsMetrics(String broker, String requestHost) {
         if (StringUtils.isNotBlank(pulsarJwtToken)) {
             header.put("Authorization", String.format("Bearer %s", pulsarJwtToken));
diff --git a/src/main/java/org/apache/pulsar/manager/service/impl/ClustersServiceImpl.java b/src/main/java/org/apache/pulsar/manager/service/impl/ClustersServiceImpl.java
index 920e4d3..ee82df6 100644
--- a/src/main/java/org/apache/pulsar/manager/service/impl/ClustersServiceImpl.java
+++ b/src/main/java/org/apache/pulsar/manager/service/impl/ClustersServiceImpl.java
@@ -40,8 +40,12 @@ public class ClustersServiceImpl implements ClustersService {
     @Value("${backend.jwt.token}")
     private String pulsarJwtToken;
 
+    private final BrokersService brokersService;
+
     @Autowired
-    private BrokersService brokersService;
+    public ClustersServiceImpl(BrokersService brokersService) {
+        this.brokersService = brokersService;
+    }
 
 
     public Map<String, Object> getClustersList(Integer pageNum,
diff --git a/src/main/java/org/apache/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java b/src/main/java/org/apache/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
index 40bf894..f62dbd8 100644
--- a/src/main/java/org/apache/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
+++ b/src/main/java/org/apache/pulsar/manager/service/impl/EnvironmentCacheServiceImpl.java
@@ -44,15 +44,15 @@ import org.springframework.stereotype.Service;
 @Service
 public class EnvironmentCacheServiceImpl implements EnvironmentCacheService {
 
-    @Autowired
-    private EnvironmentsRepository environmentsRepository;
-
     @Value("${backend.jwt.token}")
     private String pulsarJwtToken;
 
+    private final EnvironmentsRepository environmentsRepository;
     private final Map<String, Map<String, ClusterData>> environments;
 
-    public EnvironmentCacheServiceImpl() {
+    @Autowired
+    public EnvironmentCacheServiceImpl(EnvironmentsRepository environmentsRepository) {
+        this.environmentsRepository = environmentsRepository;
         this.environments = new ConcurrentHashMap<>();
     }
 
diff --git a/src/main/java/org/apache/pulsar/manager/service/impl/NamespacesServiceImpl.java b/src/main/java/org/apache/pulsar/manager/service/impl/NamespacesServiceImpl.java
index fb48dff..5c34b1d 100644
--- a/src/main/java/org/apache/pulsar/manager/service/impl/NamespacesServiceImpl.java
+++ b/src/main/java/org/apache/pulsar/manager/service/impl/NamespacesServiceImpl.java
@@ -38,11 +38,16 @@ public class NamespacesServiceImpl implements NamespacesService {
     @Value("${backend.jwt.token}")
     private String pulsarJwtToken;
 
-    @Autowired
-    private TopicsStatsRepository topicsStatsRepository;
+    private final TopicsStatsRepository topicsStatsRepository;
+    private final TopicsService topicsService;
 
     @Autowired
-    private TopicsService topicsService;
+    public NamespacesServiceImpl(
+            TopicsStatsRepository topicsStatsRepository,
+            TopicsService topicsService) {
+        this.topicsStatsRepository = topicsStatsRepository;
+        this.topicsService = topicsService;
+    }
 
     public Map<String, Object> getNamespaceList(Integer pageNum, Integer pageSize, String tenant, String requestHost) {
         Map<String, Object> namespacesMap = Maps.newHashMap();
diff --git a/src/main/java/org/apache/pulsar/manager/service/impl/TopicsServiceImpl.java b/src/main/java/org/apache/pulsar/manager/service/impl/TopicsServiceImpl.java
index 85e3c17..9d2fb22 100644
--- a/src/main/java/org/apache/pulsar/manager/service/impl/TopicsServiceImpl.java
+++ b/src/main/java/org/apache/pulsar/manager/service/impl/TopicsServiceImpl.java
@@ -34,8 +34,7 @@ import java.util.*;
 @Service
 public class TopicsServiceImpl implements TopicsService {
 
-    private static final Logger log = LoggerFactory.getLogger(TopicsServiceImpl.class);
-
+    public static final String PARTITIONED_TOPIC_SUFFIX = "-partition-";
 
     @Value("${backend.directRequestBroker}")
     private boolean directRequestBroker;
@@ -43,11 +42,12 @@ public class TopicsServiceImpl implements TopicsService {
     @Value("${backend.jwt.token}")
     private String pulsarJwtToken;
 
-    @Autowired
-    private TopicsStatsRepository topicsStatsRepository;
-
-    public static final String PARTITIONED_TOPIC_SUFFIX = "-partition-";
+    private final TopicsStatsRepository topicsStatsRepository;
 
+    @Autowired
+    public TopicsServiceImpl(TopicsStatsRepository topicsStatsRepository) {
+        this.topicsStatsRepository = topicsStatsRepository;
+    }
 
     private boolean isPartitionedTopic(List<String> topics, String topic) {
         if (topic.contains(PARTITIONED_TOPIC_SUFFIX)) {
diff --git a/src/main/java/org/apache/pulsar/manager/zuul/EnvironmentForward.java b/src/main/java/org/apache/pulsar/manager/zuul/EnvironmentForward.java
index 6b5eafa..4be4c8a 100644
--- a/src/main/java/org/apache/pulsar/manager/zuul/EnvironmentForward.java
+++ b/src/main/java/org/apache/pulsar/manager/zuul/EnvironmentForward.java
@@ -39,11 +39,16 @@ public class EnvironmentForward extends ZuulFilter {
 
     private static final Logger log = LoggerFactory.getLogger(EnvironmentForward.class);
 
-    @Autowired
-    private EnvironmentCacheService environmentCacheService;
     @Value("${backend.jwt.token}")
     private String pulsarJwtToken;
 
+    private final EnvironmentCacheService environmentCacheService;
+
+    @Autowired
+    public EnvironmentForward(EnvironmentCacheService environmentCacheService) {
+        this.environmentCacheService = environmentCacheService;
+    }
+
     @Override
     public String filterType() {
         return PRE_TYPE;
diff --git a/src/main/java/org/apache/pulsar/manager/zuul/LocationHeaderRewritingFilter.java b/src/main/java/org/apache/pulsar/manager/zuul/LocationHeaderRewritingFilter.java
index 4ab871f..7432c0c 100644
--- a/src/main/java/org/apache/pulsar/manager/zuul/LocationHeaderRewritingFilter.java
+++ b/src/main/java/org/apache/pulsar/manager/zuul/LocationHeaderRewritingFilter.java
@@ -39,9 +39,6 @@ public class LocationHeaderRewritingFilter extends ZuulFilter {
 
     private final UrlPathHelper urlPathHelper = new UrlPathHelper();
 
-    @Autowired
-    private RouteLocator routeLocator;
-
     @Value("${redirect.host}")
     private String host;
 
@@ -50,6 +47,14 @@ public class LocationHeaderRewritingFilter extends ZuulFilter {
 
     @Value("${redirect.scheme}")
     private String scheme;
+
+    private final RouteLocator routeLocator;
+
+    @Autowired
+    public LocationHeaderRewritingFilter(RouteLocator routeLocator) {
+        this.routeLocator = routeLocator;
+    }
+
     @Override
     public String filterType() {
         return POST_TYPE;