You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by bb...@apache.org on 2024/07/29 14:22:03 UTC

(nifi) branch main updated: NIFI-13562 Migrated web-api Configuration from XML to Java (#9111)

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

bbende pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new d5b69c588f NIFI-13562 Migrated web-api Configuration from XML to Java (#9111)
d5b69c588f is described below

commit d5b69c588fc1b818c6373b0cbb8c02ba361c4fbc
Author: David Handermann <ex...@apache.org>
AuthorDate: Mon Jul 29 09:21:57 2024 -0500

    NIFI-13562 Migrated web-api Configuration from XML to Java (#9111)
    
    - Configured Controller annotation wiring for Resource classes
    - Configured Service annotation wiring for Auditor classes
    - Configured Repository annotation wiring for DAO classes
---
 .../org/apache/nifi/audit/AccessPolicyAuditor.java |   2 +
 .../apache/nifi/audit/ComponentStateAuditor.java   |   2 +
 .../org/apache/nifi/audit/ControllerAuditor.java   |   2 +
 .../nifi/audit/ControllerServiceAuditor.java       |   2 +
 .../apache/nifi/audit/FlowAnalysisRuleAuditor.java |   2 +
 .../java/org/apache/nifi/audit/FunnelAuditor.java  |   2 +
 .../java/org/apache/nifi/audit/LabelAuditor.java   |   2 +
 .../java/org/apache/nifi/audit/NiFiAuditor.java    |  12 +-
 .../apache/nifi/audit/ParameterContextAuditor.java |   5 +-
 .../nifi/audit/ParameterProviderAuditor.java       |   2 +
 .../java/org/apache/nifi/audit/PortAuditor.java    |   2 +
 .../org/apache/nifi/audit/ProcessGroupAuditor.java |   2 +
 .../org/apache/nifi/audit/ProcessorAuditor.java    |   2 +
 .../org/apache/nifi/audit/RelationshipAuditor.java |   2 +
 .../nifi/audit/RemoteProcessGroupAuditor.java      |   2 +
 .../apache/nifi/audit/ReportingTaskAuditor.java    |   2 +
 .../java/org/apache/nifi/audit/SnippetAuditor.java |  24 +-
 .../java/org/apache/nifi/audit/UserAuditor.java    |   2 +
 .../org/apache/nifi/audit/UserGroupAuditor.java    |   2 +
 .../authorization/StandardAuthorizableLookup.java  |  26 +-
 .../apache/nifi/web/NiFiWebApiConfiguration.java   |  16 +-
 .../apache/nifi/web/NiFiWebApiResourceConfig.java  |   2 +-
 .../apache/nifi/web/StandardNiFiServiceFacade.java |  41 +-
 .../apache/nifi/web/api/AccessPolicyResource.java  |   2 +
 .../org/apache/nifi/web/api/AccessResource.java    |   9 +-
 .../apache/nifi/web/api/ApplicationResource.java   |  15 +-
 .../nifi/web/api/AuthenticationResource.java       |   2 +
 .../apache/nifi/web/api/ConnectionResource.java    |   5 +
 .../apache/nifi/web/api/ControllerResource.java    |  11 +-
 .../nifi/web/api/ControllerServiceResource.java    |   6 +-
 .../org/apache/nifi/web/api/CountersResource.java  |   5 +
 .../apache/nifi/web/api/DataTransferResource.java  |   4 +
 .../apache/nifi/web/api/FlowFileQueueResource.java |   6 +-
 .../java/org/apache/nifi/web/api/FlowResource.java |  18 +-
 .../apache/nifi/web/api/FlowUpdateResource.java    |  11 +-
 .../org/apache/nifi/web/api/FunnelResource.java    |   7 +-
 .../org/apache/nifi/web/api/InputPortResource.java |   7 +-
 .../org/apache/nifi/web/api/LabelResource.java     |   5 +
 .../apache/nifi/web/api/OutputPortResource.java    |   7 +-
 .../nifi/web/api/ParameterContextResource.java     |  14 +-
 .../nifi/web/api/ParameterProviderResource.java    |  23 +-
 .../apache/nifi/web/api/ProcessGroupResource.java  |  14 +-
 .../org/apache/nifi/web/api/ProcessorResource.java |   7 +-
 .../nifi/web/api/ProvenanceEventResource.java      |   7 +-
 .../apache/nifi/web/api/ProvenanceResource.java    |   7 +-
 .../nifi/web/api/RemoteProcessGroupResource.java   |   7 +-
 .../apache/nifi/web/api/ReportingTaskResource.java |   7 +-
 .../org/apache/nifi/web/api/ResourceResource.java  |   7 +-
 .../apache/nifi/web/api/SiteToSiteResource.java    |   6 +
 .../org/apache/nifi/web/api/SnippetResource.java   |   7 +-
 .../nifi/web/api/SystemDiagnosticsResource.java    |   6 +
 .../org/apache/nifi/web/api/TenantsResource.java   |   2 +
 .../org/apache/nifi/web/api/VersionsResource.java  |   2 +
 .../configuration/WebApplicationConfiguration.java | 282 ++++++++
 .../configuration/WebRevisionConfiguration.java    |  38 +
 .../web/configuration/WebSearchConfiguration.java  | 157 +++++
 .../apache/nifi/web/dao/impl/AbstractPortDAO.java  |   3 +-
 .../web/dao/impl/StandardComponentStateDAO.java    |   6 +-
 .../nifi/web/dao/impl/StandardConnectionDAO.java   |   7 +-
 .../web/dao/impl/StandardControllerServiceDAO.java |   7 +-
 .../web/dao/impl/StandardFlowAnalysisRuleDAO.java  |   8 +-
 .../nifi/web/dao/impl/StandardFlowRegistryDAO.java |   4 +
 .../nifi/web/dao/impl/StandardFunnelDAO.java       |   5 +-
 .../nifi/web/dao/impl/StandardInputPortDAO.java    |   2 +
 .../apache/nifi/web/dao/impl/StandardLabelDAO.java |   5 +-
 .../nifi/web/dao/impl/StandardOutputPortDAO.java   |   2 +
 .../web/dao/impl/StandardParameterContextDAO.java  |   5 +
 .../web/dao/impl/StandardParameterProviderDAO.java |   6 +
 .../dao/impl/StandardPolicyBasedAuthorizerDAO.java |   2 +
 .../nifi/web/dao/impl/StandardProcessGroupDAO.java |   5 +
 .../nifi/web/dao/impl/StandardProcessorDAO.java    |   6 +-
 .../dao/impl/StandardRemoteProcessGroupDAO.java    |   5 +
 .../web/dao/impl/StandardReportingTaskDAO.java     |   8 +-
 .../nifi/web/dao/impl/StandardSnippetDAO.java      |   6 +-
 .../nifi/web/search/ComponentMatcherFactory.java   |   2 +-
 .../search/attributematchers/PropertyMatcher.java  |   4 +-
 .../ControllerServiceProviderFactoryBean.java      |  57 --
 .../FlowAnalysisRuleProviderFactoryBean.java       |  54 --
 .../spring/ReportingTaskProviderFactoryBean.java   |  57 --
 .../ParameterContextNameCollisionResolver.java     |   2 +-
 .../nifi/web/util/ParameterContextReplacer.java    |   2 +-
 .../src/main/resources/nifi-web-api-context.xml    | 783 ---------------------
 .../org/apache/nifi/audit/TestLabelAuditor.java    |  19 +-
 .../apache/nifi/audit/TestProcessGroupAuditor.java |  19 +-
 .../apache/nifi/audit/TestProcessorAuditor.java    |  35 +-
 .../attributematchers/PropertyMatcherTest.java     |  21 +-
 86 files changed, 949 insertions(+), 1069 deletions(-)

diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/AccessPolicyAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/AccessPolicyAuditor.java
index 4d469dee56..b96e925342 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/AccessPolicyAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/AccessPolicyAuditor.java
@@ -33,6 +33,7 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.text.Collator;
 import java.util.ArrayList;
@@ -47,6 +48,7 @@ import java.util.Map;
 /**
  * Audits policy creation/removal and configuration changes.
  */
+@Service
 @Aspect
 public class AccessPolicyAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ComponentStateAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ComponentStateAuditor.java
index 30d8ea51f0..bda358aa62 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ComponentStateAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ComponentStateAuditor.java
@@ -35,11 +35,13 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 
+@Service
 @Aspect
 public class ComponentStateAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ControllerAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ControllerAuditor.java
index 7d48c139a6..012609c2e4 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ControllerAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ControllerAuditor.java
@@ -29,6 +29,7 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -37,6 +38,7 @@ import java.util.Date;
 /**
  * Audits configuration changes to the controller.
  */
+@Service
 @Aspect
 public class ControllerAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ControllerServiceAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ControllerServiceAuditor.java
index 7f510a884b..a850375d6d 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ControllerServiceAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ControllerServiceAuditor.java
@@ -41,6 +41,7 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -53,6 +54,7 @@ import java.util.Set;
 /**
  * Audits controller service creation/removal and configuration changes.
  */
+@Service
 @Aspect
 public class ControllerServiceAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/FlowAnalysisRuleAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/FlowAnalysisRuleAuditor.java
index aceae7ade9..c291bfb62d 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/FlowAnalysisRuleAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/FlowAnalysisRuleAuditor.java
@@ -37,6 +37,7 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -49,6 +50,7 @@ import java.util.Set;
 /**
  * Audits flow analysis rule creation/removal and configuration changes.
  */
+@Service
 @Aspect
 public class FlowAnalysisRuleAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/FunnelAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/FunnelAuditor.java
index 4f96772e3c..735fc02bb8 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/FunnelAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/FunnelAuditor.java
@@ -30,9 +30,11 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.Date;
 
+@Service
 @Aspect
 public class FunnelAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/LabelAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/LabelAuditor.java
index 87986f4d37..c80376135f 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/LabelAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/LabelAuditor.java
@@ -32,10 +32,12 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.Date;
 import java.util.Objects;
 
+@Service
 @Aspect
 public class LabelAuditor extends NiFiAuditor {
     private static final Logger logger = LoggerFactory.getLogger(LabelAuditor.class);
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/NiFiAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/NiFiAuditor.java
index d257911eaf..b4f29c0605 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/NiFiAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/NiFiAuditor.java
@@ -23,9 +23,9 @@ import org.apache.nifi.action.details.MoveDetails;
 import org.apache.nifi.admin.service.AuditService;
 import org.apache.nifi.bundle.BundleCoordinate;
 import org.apache.nifi.groups.ProcessGroup;
-import org.apache.nifi.web.NiFiServiceFacade;
 import org.apache.nifi.web.dao.ProcessGroupDAO;
 import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -38,7 +38,7 @@ public abstract class NiFiAuditor {
     protected static final String SENSITIVE_VALUE_PLACEHOLDER = "********";
 
     private AuditService auditService;
-    private NiFiServiceFacade serviceFacade;
+
     private ProcessGroupDAO processGroupDAO;
 
     /**
@@ -123,15 +123,12 @@ public abstract class NiFiAuditor {
         return String.format("%s from %s", formattedType, formattedBundle);
     }
 
-    /* setters / getters */
+    @Autowired
     public void setAuditService(AuditService auditService) {
         this.auditService = auditService;
     }
 
-    public void setServiceFacade(NiFiServiceFacade serviceFacade) {
-        this.serviceFacade = serviceFacade;
-    }
-
+    @Autowired
     public void setProcessGroupDAO(ProcessGroupDAO processGroupDAO) {
         this.processGroupDAO = processGroupDAO;
     }
@@ -139,5 +136,4 @@ public abstract class NiFiAuditor {
     public ProcessGroupDAO getProcessGroupDAO() {
         return processGroupDAO;
     }
-
 }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ParameterContextAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ParameterContextAuditor.java
index 5552408826..3afe1817fd 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ParameterContextAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ParameterContextAuditor.java
@@ -33,6 +33,7 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -42,9 +43,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.stream.Collectors;
 
-/**
- * Audits processor creation/removal and configuration changes.
- */
+@Service
 @Aspect
 public class ParameterContextAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ParameterProviderAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ParameterProviderAuditor.java
index e27001cb2c..e115489b86 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ParameterProviderAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ParameterProviderAuditor.java
@@ -35,6 +35,7 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -46,6 +47,7 @@ import java.util.Set;
 /**
  * Audits parameter provider creation/removal and configuration changes.
  */
+@Service
 @Aspect
 public class ParameterProviderAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/PortAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/PortAuditor.java
index 3ae44be1c6..c366cc4dc6 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/PortAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/PortAuditor.java
@@ -35,11 +35,13 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 
+@Service
 @Aspect
 public class PortAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ProcessGroupAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ProcessGroupAuditor.java
index b30239a54c..5cfb5e25b2 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ProcessGroupAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ProcessGroupAuditor.java
@@ -38,6 +38,7 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -47,6 +48,7 @@ import java.util.Set;
 /**
  * Audits process group creation/removal and configuration changes.
  */
+@Service
 @Aspect
 public class ProcessGroupAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ProcessorAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ProcessorAuditor.java
index adfc6238ae..ce284ef512 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ProcessorAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ProcessorAuditor.java
@@ -41,6 +41,7 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 import org.w3c.dom.Document;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
@@ -63,6 +64,7 @@ import java.util.concurrent.atomic.AtomicReference;
 /**
  * Audits processor creation/removal and configuration changes.
  */
+@Service
 @Aspect
 public class ProcessorAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/RelationshipAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/RelationshipAuditor.java
index 2560b24590..0a31538e99 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/RelationshipAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/RelationshipAuditor.java
@@ -44,6 +44,7 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -56,6 +57,7 @@ import java.util.Map;
 /**
  * Audits relationship creation/removal.
  */
+@Service
 @Aspect
 public class RelationshipAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/RemoteProcessGroupAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/RemoteProcessGroupAuditor.java
index 690d404d8b..05c7ce1057 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/RemoteProcessGroupAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/RemoteProcessGroupAuditor.java
@@ -49,10 +49,12 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 /**
  * Audits remote process group creation/removal and configuration changes.
  */
+@Service
 @Aspect
 public class RemoteProcessGroupAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ReportingTaskAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ReportingTaskAuditor.java
index b00e449810..33feba3115 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ReportingTaskAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/ReportingTaskAuditor.java
@@ -36,6 +36,7 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -48,6 +49,7 @@ import java.util.Set;
 /**
  * Audits reporting creation/removal and configuration changes.
  */
+@Service
 @Aspect
 public class ReportingTaskAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/SnippetAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/SnippetAuditor.java
index 1801567fcc..bdb2b969e2 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/SnippetAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/SnippetAuditor.java
@@ -59,6 +59,9 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -66,9 +69,7 @@ import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;
 
-/**
- *
- */
+@Service
 @Aspect
 public class SnippetAuditor extends NiFiAuditor {
 
@@ -459,59 +460,74 @@ public class SnippetAuditor extends NiFiAuditor {
         }
     }
 
-    /* setters */
+    @Autowired
     public void setFunnelDAO(FunnelDAO funnelDAO) {
         this.funnelDAO = funnelDAO;
     }
 
+    @Qualifier("standardInputPortDAO")
+    @Autowired
     public void setInputPortDAO(PortDAO inputPortDAO) {
         this.inputPortDAO = inputPortDAO;
     }
 
+    @Qualifier("standardOutputPortDAO")
+    @Autowired
     public void setOutputPortDAO(PortDAO outputPortDAO) {
         this.outputPortDAO = outputPortDAO;
     }
 
+    @Autowired
     public void setPortAuditor(PortAuditor portAuditor) {
         this.portAuditor = portAuditor;
     }
 
+    @Autowired
     public void setFunnelAuditor(FunnelAuditor funnelAuditor) {
         this.funnelAuditor = funnelAuditor;
     }
 
+    @Autowired
     public void setProcessGroupAuditor(ProcessGroupAuditor processGroupAuditor) {
         this.processGroupAuditor = processGroupAuditor;
     }
 
+    @Autowired
     public void setRemoteProcessGroupAuditor(RemoteProcessGroupAuditor remoteProcessGroupAuditor) {
         this.remoteProcessGroupAuditor = remoteProcessGroupAuditor;
     }
 
+    @Autowired
     public void setLabelAuditor(LabelAuditor labelAuditor) {
         this.labelAuditor = labelAuditor;
     }
 
+    @Autowired
     public void setRemoteProcessGroupDAO(RemoteProcessGroupDAO remoteProcessGroupDAO) {
         this.remoteProcessGroupDAO = remoteProcessGroupDAO;
     }
 
+    @Autowired
     public void setConnectionDAO(ConnectionDAO connectionDAO) {
         this.connectionDAO = connectionDAO;
     }
 
+    @Autowired
     public void setProcessorAuditor(ProcessorAuditor processorAuditor) {
         this.processorAuditor = processorAuditor;
     }
 
+    @Autowired
     public void setProcessorDAO(ProcessorDAO processorDAO) {
         this.processorDAO = processorDAO;
     }
 
+    @Autowired
     public void setLabelDAO(LabelDAO labelDAO) {
         this.labelDAO = labelDAO;
     }
 
+    @Autowired
     public void setRelationshipAuditor(RelationshipAuditor relationshipAuditor) {
         this.relationshipAuditor = relationshipAuditor;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/UserAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/UserAuditor.java
index 2caabf1561..5074019bac 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/UserAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/UserAuditor.java
@@ -32,6 +32,7 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -42,6 +43,7 @@ import java.util.Map;
 /**
  * Audits user creation/removal and configuration changes.
  */
+@Service
 @Aspect
 public class UserAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/UserGroupAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/UserGroupAuditor.java
index e77a158b20..740da0bb59 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/UserGroupAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/audit/UserGroupAuditor.java
@@ -33,6 +33,7 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 
 import java.text.Collator;
 import java.util.ArrayList;
@@ -47,6 +48,7 @@ import java.util.Map;
 /**
  * Audits user creation/removal and configuration changes.
  */
+@Service
 @Aspect
 public class UserGroupAuditor extends NiFiAuditor {
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/authorization/StandardAuthorizableLookup.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/authorization/StandardAuthorizableLookup.java
index a3402334e5..c2f1e5187f 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/authorization/StandardAuthorizableLookup.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/authorization/StandardAuthorizableLookup.java
@@ -70,14 +70,17 @@ import org.apache.nifi.web.dao.ProcessorDAO;
 import org.apache.nifi.web.dao.RemoteProcessGroupDAO;
 import org.apache.nifi.web.dao.ReportingTaskDAO;
 import org.apache.nifi.web.dao.SnippetDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
 
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-
-class StandardAuthorizableLookup implements AuthorizableLookup {
+@Component
+public class StandardAuthorizableLookup implements AuthorizableLookup {
 
     private static final TenantAuthorizable TENANT_AUTHORIZABLE = new TenantAuthorizable();
 
@@ -1300,70 +1303,89 @@ class StandardAuthorizableLookup implements AuthorizableLookup {
         }
     }
 
+    @Autowired
     public void setProcessorDAO(ProcessorDAO processorDAO) {
         this.processorDAO = processorDAO;
     }
 
+    @Autowired
     public void setProcessGroupDAO(ProcessGroupDAO processGroupDAO) {
         this.processGroupDAO = processGroupDAO;
     }
 
+    @Autowired
     public void setRemoteProcessGroupDAO(RemoteProcessGroupDAO remoteProcessGroupDAO) {
         this.remoteProcessGroupDAO = remoteProcessGroupDAO;
     }
 
+    @Autowired
     public void setLabelDAO(LabelDAO labelDAO) {
         this.labelDAO = labelDAO;
     }
 
+    @Autowired
     public void setFunnelDAO(FunnelDAO funnelDAO) {
         this.funnelDAO = funnelDAO;
     }
 
+    @Autowired
     public void setSnippetDAO(SnippetDAO snippetDAO) {
         this.snippetDAO = snippetDAO;
     }
 
+    @Qualifier("standardInputPortDAO")
+    @Autowired
     public void setInputPortDAO(PortDAO inputPortDAO) {
         this.inputPortDAO = inputPortDAO;
     }
 
+    @Qualifier("standardOutputPortDAO")
+    @Autowired
     public void setOutputPortDAO(PortDAO outputPortDAO) {
         this.outputPortDAO = outputPortDAO;
     }
 
+    @Autowired
     public void setConnectionDAO(ConnectionDAO connectionDAO) {
         this.connectionDAO = connectionDAO;
     }
 
+    @Autowired
     public void setControllerServiceDAO(ControllerServiceDAO controllerServiceDAO) {
         this.controllerServiceDAO = controllerServiceDAO;
     }
 
+    @Autowired
     public void setReportingTaskDAO(ReportingTaskDAO reportingTaskDAO) {
         this.reportingTaskDAO = reportingTaskDAO;
     }
 
+    @Autowired
     public void setFlowAnalysisRuleDAO(FlowAnalysisRuleDAO flowAnalysisRuleDAO) {
         this.flowAnalysisRuleDAO = flowAnalysisRuleDAO;
     }
 
+    @Autowired
     public void setParameterProviderDAO(final ParameterProviderDAO parameterProviderDAO) {
         this.parameterProviderDAO = parameterProviderDAO;
     }
 
+    @Autowired
     public void setFlowRegistryDAO(FlowRegistryDAO flowRegistryDAO) {
         this.flowRegistryDAO = flowRegistryDAO;
     }
 
+    @Autowired
     public void setAccessPolicyDAO(AccessPolicyDAO accessPolicyDAO) {
         this.accessPolicyDAO = accessPolicyDAO;
     }
 
+    @Autowired
     public void setParameterContextDAO(ParameterContextDAO parameterContextDAO) {
         this.parameterContextDAO = parameterContextDAO;
     }
 
+    @Autowired
     public void setControllerFacade(ControllerFacade controllerFacade) {
         this.controllerFacade = controllerFacade;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiWebApiConfiguration.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiWebApiConfiguration.java
index 9e686b7094..f5617b6b07 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiWebApiConfiguration.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiWebApiConfiguration.java
@@ -18,15 +18,15 @@ package org.apache.nifi.web;
 
 import org.apache.nifi.admin.service.AuditService;
 import org.apache.nifi.admin.service.EntityStoreAuditService;
+import org.apache.nifi.framework.configuration.ApplicationPropertiesConfiguration;
 import org.apache.nifi.util.NiFiProperties;
 import org.apache.nifi.web.configuration.AuthenticationConfiguration;
+import org.apache.nifi.web.configuration.WebApplicationConfiguration;
 import org.apache.nifi.web.security.configuration.WebSecurityConfiguration;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.context.annotation.ImportResource;
 import org.springframework.util.StringUtils;
 
 import java.io.File;
@@ -36,14 +36,12 @@ import java.net.URISyntaxException;
 /**
  * Web Application Spring Configuration
  */
-@Configuration
-@ComponentScan(basePackages = "org.apache.nifi.framework.configuration")
-@Import({
-        WebSecurityConfiguration.class
-})
-@ImportResource({
-    "classpath:nifi-web-api-context.xml"
+@ComponentScan(basePackageClasses = {
+        ApplicationPropertiesConfiguration.class,
+        WebSecurityConfiguration.class,
+        WebApplicationConfiguration.class
 })
+@Configuration
 public class NiFiWebApiConfiguration {
     private static final URI OAUTH2_AUTHORIZATION_URI = getPathUri("/nifi-api/oauth2/authorization/consumer");
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiWebApiResourceConfig.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiWebApiResourceConfig.java
index 4988c6e43d..2590e73646 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiWebApiResourceConfig.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiWebApiResourceConfig.java
@@ -87,7 +87,7 @@ public class NiFiWebApiResourceConfig extends ResourceConfig {
         register(ctx.getBean("processGroupResource"));
         register(ctx.getBean("processorResource"));
         register(ctx.getBean("connectionResource"));
-        register(ctx.getBean("flowfileQueueResource"));
+        register(ctx.getBean("flowFileQueueResource"));
         register(ctx.getBean("remoteProcessGroupResource"));
         register(ctx.getBean("inputPortResource"));
         register(ctx.getBean("outputPortResource"));
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
index e67c50d428..4ea3cc8c25 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
@@ -394,7 +394,10 @@ import org.apache.nifi.web.util.PredictionBasedParallelProcessingService;
 import org.apache.nifi.web.util.SnippetUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.security.oauth2.core.OAuth2Token;
+import org.springframework.stereotype.Service;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -426,6 +429,7 @@ import static org.apache.commons.lang3.StringUtils.containsIgnoreCase;
 /**
  * Implementation of NiFiServiceFacade that performs revision checking.
  */
+@Service
 public class StandardNiFiServiceFacade implements NiFiServiceFacade {
     private static final Logger logger = LoggerFactory.getLogger(StandardNiFiServiceFacade.class);
     private static final int VALIDATION_WAIT_MILLIS = 50;
@@ -6830,139 +6834,174 @@ public class StandardNiFiServiceFacade implements NiFiServiceFacade {
         return new NiFiRegistryFlowMapper(extensionManager);
     }
 
-    /* setters */
+    @Autowired
     public void setProperties(final NiFiProperties properties) {
         this.properties = properties;
     }
 
+    @Autowired
     public void setControllerFacade(final ControllerFacade controllerFacade) {
         this.controllerFacade = controllerFacade;
     }
 
+    @Autowired
     public void setRemoteProcessGroupDAO(final RemoteProcessGroupDAO remoteProcessGroupDAO) {
         this.remoteProcessGroupDAO = remoteProcessGroupDAO;
     }
 
+    @Autowired
     public void setLabelDAO(final LabelDAO labelDAO) {
         this.labelDAO = labelDAO;
     }
 
+    @Autowired
     public void setFunnelDAO(final FunnelDAO funnelDAO) {
         this.funnelDAO = funnelDAO;
     }
 
+    @Autowired
     public void setSnippetDAO(final SnippetDAO snippetDAO) {
         this.snippetDAO = snippetDAO;
     }
 
+    @Autowired
     public void setProcessorDAO(final ProcessorDAO processorDAO) {
         this.processorDAO = processorDAO;
     }
 
+    @Autowired
     public void setConnectionDAO(final ConnectionDAO connectionDAO) {
         this.connectionDAO = connectionDAO;
     }
 
+    @Autowired
     public void setAuditService(final AuditService auditService) {
         this.auditService = auditService;
     }
 
+    @Autowired
     public void setRevisionManager(final RevisionManager revisionManager) {
         this.revisionManager = revisionManager;
     }
 
+    @Autowired
     public void setDtoFactory(final DtoFactory dtoFactory) {
         this.dtoFactory = dtoFactory;
     }
 
+    @Autowired
     public void setEntityFactory(final EntityFactory entityFactory) {
         this.entityFactory = entityFactory;
     }
 
+    @Qualifier("standardInputPortDAO")
+    @Autowired
     public void setInputPortDAO(final PortDAO inputPortDAO) {
         this.inputPortDAO = inputPortDAO;
     }
 
+    @Qualifier("standardOutputPortDAO")
+    @Autowired
     public void setOutputPortDAO(final PortDAO outputPortDAO) {
         this.outputPortDAO = outputPortDAO;
     }
 
+    @Autowired
     public void setProcessGroupDAO(final ProcessGroupDAO processGroupDAO) {
         this.processGroupDAO = processGroupDAO;
     }
 
+    @Autowired
     public void setControllerServiceDAO(final ControllerServiceDAO controllerServiceDAO) {
         this.controllerServiceDAO = controllerServiceDAO;
     }
 
+    @Autowired
     public void setReportingTaskDAO(final ReportingTaskDAO reportingTaskDAO) {
         this.reportingTaskDAO = reportingTaskDAO;
     }
 
+    @Autowired
     public void setFlowAnalysisRuleDAO(FlowAnalysisRuleDAO flowAnalysisRuleDAO) {
         this.flowAnalysisRuleDAO = flowAnalysisRuleDAO;
     }
 
+    @Autowired
     public void setParameterProviderDAO(final ParameterProviderDAO parameterProviderDAO) {
         this.parameterProviderDAO = parameterProviderDAO;
     }
 
+    @Autowired
     public void setParameterContextDAO(final ParameterContextDAO parameterContextDAO) {
         this.parameterContextDAO = parameterContextDAO;
     }
 
+    @Autowired
     public void setSnippetUtils(final SnippetUtils snippetUtils) {
         this.snippetUtils = snippetUtils;
     }
 
+    @Autowired
     public void setAuthorizableLookup(final AuthorizableLookup authorizableLookup) {
         this.authorizableLookup = authorizableLookup;
     }
 
+    @Autowired
     public void setAuthorizer(final Authorizer authorizer) {
         this.authorizer = authorizer;
     }
 
+    @Autowired
     public void setUserDAO(final UserDAO userDAO) {
         this.userDAO = userDAO;
     }
 
+    @Autowired
     public void setUserGroupDAO(final UserGroupDAO userGroupDAO) {
         this.userGroupDAO = userGroupDAO;
     }
 
+    @Autowired
     public void setAccessPolicyDAO(final AccessPolicyDAO accessPolicyDAO) {
         this.accessPolicyDAO = accessPolicyDAO;
     }
 
+    @Autowired
     public void setClusterCoordinator(final ClusterCoordinator coordinator) {
         this.clusterCoordinator = coordinator;
     }
 
+    @Autowired
     public void setHeartbeatMonitor(final HeartbeatMonitor heartbeatMonitor) {
         this.heartbeatMonitor = heartbeatMonitor;
     }
 
+    @Autowired
     public void setBulletinRepository(final BulletinRepository bulletinRepository) {
         this.bulletinRepository = bulletinRepository;
     }
 
+    @Autowired
     public void setLeaderElectionManager(final LeaderElectionManager leaderElectionManager) {
         this.leaderElectionManager = leaderElectionManager;
     }
 
+    @Autowired
     public void setFlowRegistryDAO(FlowRegistryDAO flowRegistryDao) {
         this.flowRegistryDAO = flowRegistryDao;
     }
 
+    @Autowired
     public void setRuleViolationsManager(RuleViolationsManager ruleViolationsManager) {
         this.ruleViolationsManager = ruleViolationsManager;
     }
 
+    @Autowired
     public void setParallelProcessingService(PredictionBasedParallelProcessingService parallelProcessingService) {
         this.parallelProcessingService = parallelProcessingService;
     }
 
+    @Autowired
     public void setNarManager(final NarManager narManager) {
         this.narManager = narManager;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/AccessPolicyResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/AccessPolicyResource.java
index 77ee63ffb9..36e70c8f53 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/AccessPolicyResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/AccessPolicyResource.java
@@ -57,10 +57,12 @@ import org.apache.nifi.web.api.entity.AccessPolicyEntity;
 import org.apache.nifi.web.api.request.ClientIdParameter;
 import org.apache.nifi.web.api.request.LongParameter;
 import org.apache.nifi.web.dao.AccessPolicyDAO;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing access policies.
  */
+@Controller
 @Path("/policies")
 @Tag(name = "Policies")
 public class AccessPolicyResource extends ApplicationResource {
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/AccessResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/AccessResource.java
index a4a98fe9ef..2e4cfd2a16 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/AccessResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/AccessResource.java
@@ -59,11 +59,14 @@ import org.apache.nifi.web.security.logout.LogoutRequestManager;
 import org.apache.nifi.web.security.token.LoginAuthenticationToken;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.oauth2.server.resource.web.BearerTokenResolver;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing access.
  */
+@Controller
 @Path("/access")
 @Tag(name = "Access")
 public class AccessResource extends ApplicationResource {
@@ -260,23 +263,27 @@ public class AccessResource extends ApplicationResource {
         return applicationCookieService.getCookieValue(httpServletRequest, ApplicationCookieName.LOGOUT_REQUEST_IDENTIFIER);
     }
 
-    // setters
+    @Autowired(required = false)
     public void setLoginIdentityProvider(LoginIdentityProvider loginIdentityProvider) {
         this.loginIdentityProvider = loginIdentityProvider;
     }
 
+    @Autowired
     public void setBearerTokenProvider(final BearerTokenProvider bearerTokenProvider) {
         this.bearerTokenProvider = bearerTokenProvider;
     }
 
+    @Autowired
     public void setBearerTokenResolver(final BearerTokenResolver bearerTokenResolver) {
         this.bearerTokenResolver = bearerTokenResolver;
     }
 
+    @Autowired
     public void setJwtLogoutListener(final JwtLogoutListener jwtLogoutListener) {
         this.jwtLogoutListener = jwtLogoutListener;
     }
 
+    @Autowired
     public void setLogoutRequestManager(LogoutRequestManager logoutRequestManager) {
         this.logoutRequestManager = logoutRequestManager;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ApplicationResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ApplicationResource.java
index cd815d8195..94444f72b1 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ApplicationResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ApplicationResource.java
@@ -79,6 +79,7 @@ import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.core.Response.ResponseBuilder;
 import jakarta.ws.rs.core.UriBuilder;
 import jakarta.ws.rs.core.UriInfo;
+import org.springframework.beans.factory.annotation.Autowired;
 
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
@@ -243,16 +244,6 @@ public abstract class ApplicationResource {
         return Response.created(uri).entity(entity);
     }
 
-    /**
-     * Generates a 401 Not Authorized response with no content.
-     *
-     * @return The response to be built
-     */
-    protected ResponseBuilder generateNotAuthorizedResponse() {
-        // generate the response builder
-        return Response.status(HttpServletResponse.SC_UNAUTHORIZED);
-    }
-
     /**
      * Generates a 202 Accepted (Node Continue) response to be used within the cluster request handshake.
      *
@@ -1057,6 +1048,7 @@ public abstract class ApplicationResource {
         }
     }
 
+    @Autowired
     public void setRequestReplicator(final RequestReplicator requestReplicator) {
         this.requestReplicator = requestReplicator;
     }
@@ -1067,10 +1059,12 @@ public abstract class ApplicationResource {
         return requestReplicator;
     }
 
+    @Autowired
     public void setProperties(final NiFiProperties properties) {
         this.properties = properties;
     }
 
+    @Autowired
     public void setClusterCoordinator(final ClusterCoordinator clusterCoordinator) {
         this.clusterCoordinator = clusterCoordinator;
     }
@@ -1079,6 +1073,7 @@ public abstract class ApplicationResource {
         return clusterCoordinator;
     }
 
+    @Autowired
     public void setFlowController(final FlowController flowController) {
         this.flowController = flowController;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/AuthenticationResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/AuthenticationResource.java
index eb5bb06690..e65399496f 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/AuthenticationResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/AuthenticationResource.java
@@ -35,11 +35,13 @@ import org.apache.nifi.web.api.dto.AuthenticationConfigurationDTO;
 import org.apache.nifi.web.api.entity.AuthenticationConfigurationEntity;
 import org.apache.nifi.web.configuration.AuthenticationConfiguration;
 import org.apache.nifi.web.util.RequestUriBuilder;
+import org.springframework.stereotype.Controller;
 import org.springframework.util.StringUtils;
 
 import java.net.URI;
 import java.util.Objects;
 
+@Controller
 @Path("/authentication")
 @Tag(name = "Authentication")
 public class AuthenticationResource extends ApplicationResource {
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ConnectionResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ConnectionResource.java
index e56e452c05..cb9c91b322 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ConnectionResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ConnectionResource.java
@@ -54,10 +54,13 @@ import org.apache.nifi.web.api.dto.PositionDTO;
 import org.apache.nifi.web.api.entity.ConnectionEntity;
 import org.apache.nifi.web.api.request.ClientIdParameter;
 import org.apache.nifi.web.api.request.LongParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing a Connection.
  */
+@Controller
 @Path("/connections")
 @Tag(name = "Connections")
 public class ConnectionResource extends ApplicationResource {
@@ -362,10 +365,12 @@ public class ConnectionResource extends ApplicationResource {
         );
     }
 
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerResource.java
index ea469a6b53..a130977622 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerResource.java
@@ -115,6 +115,8 @@ import org.apache.nifi.web.api.request.LongParameter;
 import org.apache.nifi.web.client.api.HttpResponseStatus;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -130,6 +132,7 @@ import java.util.function.Consumer;
 /**
  * RESTful endpoint for managing a Flow Controller.
  */
+@Controller
 @Path("/controller")
 @Tag(name = "Controller")
 public class ControllerResource extends ApplicationResource {
@@ -2720,28 +2723,32 @@ public class ControllerResource extends ApplicationResource {
                 });
     }
 
-    // setters
-
+    @Autowired
     public void setServiceFacade(final NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setReportingTaskResource(final ReportingTaskResource reportingTaskResource) {
         this.reportingTaskResource = reportingTaskResource;
     }
 
+    @Autowired
     public void setParameterProviderResource(final ParameterProviderResource parameterProviderResource) {
         this.parameterProviderResource = parameterProviderResource;
     }
 
+    @Autowired
     public void setControllerServiceResource(final ControllerServiceResource controllerServiceResource) {
         this.controllerServiceResource = controllerServiceResource;
     }
 
+    @Autowired
     public void setAuthorizer(final Authorizer authorizer) {
         this.authorizer = authorizer;
     }
 
+    @Autowired(required = false)
     public void setUploadRequestReplicator(final UploadRequestReplicator uploadRequestReplicator) {
         this.uploadRequestReplicator = uploadRequestReplicator;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerServiceResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerServiceResource.java
index ab8a292a53..7af1482d4d 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerServiceResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerServiceResource.java
@@ -92,10 +92,13 @@ import org.apache.nifi.web.api.request.ClientIdParameter;
 import org.apache.nifi.web.api.request.LongParameter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing a Controller Service.
  */
+@Controller
 @Path("/controller-services")
 @Tag(name = "Controller Services")
 public class ControllerServiceResource extends ApplicationResource {
@@ -1151,11 +1154,12 @@ public class ControllerServiceResource extends ApplicationResource {
         return dto;
     }
 
-    // setters
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/CountersResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/CountersResource.java
index db65b9271b..9487dd87c5 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/CountersResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/CountersResource.java
@@ -48,10 +48,13 @@ import org.apache.nifi.web.api.dto.CountersDTO;
 import org.apache.nifi.web.api.entity.ComponentEntity;
 import org.apache.nifi.web.api.entity.CounterEntity;
 import org.apache.nifi.web.api.entity.CountersEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing Counters.
  */
+@Controller
 @Path("/counters")
 @Tag(name = "Counters")
 public class CountersResource extends ApplicationResource {
@@ -213,10 +216,12 @@ public class CountersResource extends ApplicationResource {
         );
     }
 
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/DataTransferResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/DataTransferResource.java
index 0b6e82fe19..609e0e6b5c 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/DataTransferResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/DataTransferResource.java
@@ -81,6 +81,8 @@ import org.apache.nifi.web.NiFiServiceFacade;
 import org.apache.nifi.web.api.entity.TransactionResultEntity;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 import static org.apache.commons.lang3.StringUtils.isEmpty;
 import static org.apache.nifi.remote.protocol.HandshakeProperty.BATCH_COUNT;
@@ -96,6 +98,7 @@ import static org.apache.nifi.remote.protocol.http.HttpHeaders.HANDSHAKE_PROPERT
 /**
  * RESTful endpoint for managing a SiteToSite connection.
  */
+@Controller
 @Path("/data-transfer")
 @Tag(name = "DataTransfer")
 public class DataTransferResource extends ApplicationResource {
@@ -836,6 +839,7 @@ public class DataTransferResource extends ApplicationResource {
         return result;
     }
 
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowFileQueueResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowFileQueueResource.java
index bd9615abb9..a641846e57 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowFileQueueResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowFileQueueResource.java
@@ -66,10 +66,13 @@ import org.apache.nifi.web.api.entity.FlowFileEntity;
 import org.apache.nifi.web.api.entity.ListingRequestEntity;
 import org.apache.nifi.web.api.request.ClientIdParameter;
 import org.apache.nifi.web.util.ResponseBuilderUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing a flowfile queue.
  */
+@Controller
 @Path("/flowfile-queues")
 @Tag(name = "FlowFileQueues")
 public class FlowFileQueueResource extends ApplicationResource {
@@ -711,11 +714,12 @@ public class FlowFileQueueResource extends ApplicationResource {
         }
     }
 
-    // setters
+    @Autowired
     public void setServiceFacade(final NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(final Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowResource.java
index 4e77dc8653..4b29015ab3 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowResource.java
@@ -150,6 +150,8 @@ import jakarta.ws.rs.core.MediaType;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.core.StreamingOutput;
 import org.apache.nifi.web.util.PaginationHelper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 import java.text.Collator;
 import java.time.OffsetDateTime;
@@ -177,6 +179,7 @@ import static org.apache.nifi.web.api.entity.ScheduleComponentsEntity.STATE_ENAB
 /**
  * RESTful endpoint for managing a Flow.
  */
+@Controller
 @Path("/flow")
 @Tag(name = "Flow")
 public class FlowResource extends ApplicationResource {
@@ -3527,56 +3530,67 @@ public class FlowResource extends ApplicationResource {
         return noCache(Response.ok(results)).build();
     }
 
-    // setters
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setProcessorResource(ProcessorResource processorResource) {
         this.processorResource = processorResource;
     }
 
+    @Autowired
     public void setInputPortResource(InputPortResource inputPortResource) {
         this.inputPortResource = inputPortResource;
     }
 
+    @Autowired
     public void setOutputPortResource(OutputPortResource outputPortResource) {
         this.outputPortResource = outputPortResource;
     }
 
+    @Autowired
     public void setFunnelResource(FunnelResource funnelResource) {
         this.funnelResource = funnelResource;
     }
 
+    @Autowired
     public void setLabelResource(LabelResource labelResource) {
         this.labelResource = labelResource;
     }
 
+    @Autowired
     public void setRemoteProcessGroupResource(RemoteProcessGroupResource remoteProcessGroupResource) {
         this.remoteProcessGroupResource = remoteProcessGroupResource;
     }
 
+    @Autowired
     public void setConnectionResource(ConnectionResource connectionResource) {
         this.connectionResource = connectionResource;
     }
 
+    @Autowired
     public void setProcessGroupResource(ProcessGroupResource processGroupResource) {
         this.processGroupResource = processGroupResource;
     }
 
+    @Autowired
     public void setControllerServiceResource(ControllerServiceResource controllerServiceResource) {
         this.controllerServiceResource = controllerServiceResource;
     }
 
+    @Autowired
     public void setReportingTaskResource(ReportingTaskResource reportingTaskResource) {
         this.reportingTaskResource = reportingTaskResource;
     }
 
+    @Autowired
     public void setParameterProviderResource(final ParameterProviderResource parameterProviderResource) {
         this.parameterProviderResource = parameterProviderResource;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowUpdateResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowUpdateResource.java
index 30460073d9..a3f5300fde 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowUpdateResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowUpdateResource.java
@@ -67,6 +67,8 @@ import jakarta.ws.rs.HttpMethod;
 import jakarta.ws.rs.core.MediaType;
 import jakarta.ws.rs.core.Response;
 import jakarta.ws.rs.core.Response.Status;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -804,24 +806,29 @@ public abstract class FlowUpdateResource<T extends ProcessGroupDescriptorEntity,
         }
     }
 
-    // setters
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
 
+    @Autowired
     public void setDtoFactory(DtoFactory dtoFactory) {
         this.dtoFactory = dtoFactory;
     }
 
+    @Qualifier("clusterComponentLifecycle")
+    @Autowired(required = false)
     public void setClusterComponentLifecycle(ComponentLifecycle componentLifecycle) {
         this.clusterComponentLifecycle = componentLifecycle;
     }
 
+    @Qualifier("localComponentLifecycle")
+    @Autowired
     public void setLocalComponentLifecycle(ComponentLifecycle componentLifecycle) {
         this.localComponentLifecycle = componentLifecycle;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FunnelResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FunnelResource.java
index 731cfe742f..2711cff2e1 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FunnelResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FunnelResource.java
@@ -50,10 +50,13 @@ import org.apache.nifi.web.api.dto.PositionDTO;
 import org.apache.nifi.web.api.entity.FunnelEntity;
 import org.apache.nifi.web.api.request.ClientIdParameter;
 import org.apache.nifi.web.api.request.LongParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing a Funnel.
  */
+@Controller
 @Path("/funnels")
 @Tag(name = "Funnels")
 public class FunnelResource extends ApplicationResource {
@@ -306,12 +309,12 @@ public class FunnelResource extends ApplicationResource {
         );
     }
 
-    // setters
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/InputPortResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/InputPortResource.java
index cf12c44564..5777d0ea56 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/InputPortResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/InputPortResource.java
@@ -54,10 +54,13 @@ import org.apache.nifi.web.api.entity.PortRunStatusEntity;
 import org.apache.nifi.web.api.entity.ProcessorEntity;
 import org.apache.nifi.web.api.request.ClientIdParameter;
 import org.apache.nifi.web.api.request.LongParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing an Input Port.
  */
+@Controller
 @Path("/input-ports")
 @Tag(name = "InputPorts")
 public class InputPortResource extends ApplicationResource {
@@ -393,12 +396,12 @@ public class InputPortResource extends ApplicationResource {
         return dto;
     }
 
-    // setters
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/LabelResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/LabelResource.java
index c0060affbd..c8b55d17e0 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/LabelResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/LabelResource.java
@@ -50,10 +50,13 @@ import org.apache.nifi.web.api.dto.PositionDTO;
 import org.apache.nifi.web.api.entity.LabelEntity;
 import org.apache.nifi.web.api.request.ClientIdParameter;
 import org.apache.nifi.web.api.request.LongParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing a Label.
  */
+@Controller
 @Path("/labels")
 @Tag(name = "Labels")
 public class LabelResource extends ApplicationResource {
@@ -305,10 +308,12 @@ public class LabelResource extends ApplicationResource {
         );
     }
 
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/OutputPortResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/OutputPortResource.java
index 38149c1565..e4ed247b6f 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/OutputPortResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/OutputPortResource.java
@@ -54,10 +54,13 @@ import org.apache.nifi.web.api.entity.PortRunStatusEntity;
 import org.apache.nifi.web.api.entity.ProcessorEntity;
 import org.apache.nifi.web.api.request.ClientIdParameter;
 import org.apache.nifi.web.api.request.LongParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing an Output Port.
  */
+@Controller
 @Path("/output-ports")
 @Tag(name = "OutputPorts")
 public class OutputPortResource extends ApplicationResource {
@@ -394,12 +397,12 @@ public class OutputPortResource extends ApplicationResource {
         return dto;
     }
 
-    // setters
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ParameterContextResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ParameterContextResource.java
index 4755dd61b7..3cf4ab79c1 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ParameterContextResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ParameterContextResource.java
@@ -40,6 +40,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.responses.ApiResponses;
 import io.swagger.v3.oas.annotations.security.SecurityRequirement;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.PostConstruct;
 import jakarta.ws.rs.Consumes;
 import jakarta.ws.rs.DELETE;
 import jakarta.ws.rs.DefaultValue;
@@ -97,7 +98,11 @@ import org.apache.nifi.web.util.ComponentLifecycle;
 import org.apache.nifi.web.util.ParameterUpdateManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Controller;
 
+@Controller
 @Path("/parameter-contexts")
 @Tag(name = "ParameterContexts")
 public class ParameterContextResource extends AbstractParameterResource {
@@ -116,6 +121,7 @@ public class ParameterContextResource extends AbstractParameterResource {
     private RequestManager<ParameterContextValidationRequestEntity, ComponentValidationResultsEntity> validationRequestManager = new AsyncRequestManager<>(100, TimeUnit.MINUTES.toMillis(1L),
             "Parameter Context Validation Thread");
 
+    @PostConstruct
     public void init() {
         parameterUpdateManager = new ParameterUpdateManager(serviceFacade, dtoFactory, authorizer, this);
     }
@@ -1084,23 +1090,29 @@ public class ParameterContextResource extends AbstractParameterResource {
         }
     }
 
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
 
+    @Qualifier("clusterComponentLifecycle")
+    @Autowired(required = false)
     public void setClusterComponentLifecycle(ComponentLifecycle componentLifecycle) {
         this.clusterComponentLifecycle = componentLifecycle;
     }
 
+    @Qualifier("localComponentLifecycle")
+    @Autowired
     public void setLocalComponentLifecycle(ComponentLifecycle componentLifecycle) {
         this.localComponentLifecycle = componentLifecycle;
     }
 
+    @Autowired
     public void setDtoFactory(final DtoFactory dtoFactory) {
         this.dtoFactory = dtoFactory;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ParameterProviderResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ParameterProviderResource.java
index b7b2601773..17bd5a47af 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ParameterProviderResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ParameterProviderResource.java
@@ -43,6 +43,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.responses.ApiResponses;
 import io.swagger.v3.oas.annotations.security.SecurityRequirement;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.PostConstruct;
 import jakarta.servlet.ServletContext;
 import jakarta.ws.rs.Consumes;
 import jakarta.ws.rs.DELETE;
@@ -125,10 +126,14 @@ import org.apache.nifi.web.util.LifecycleManagementException;
 import org.apache.nifi.web.util.ParameterUpdateManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing a Parameter Provider.
  */
+@Controller
 @Path("/parameter-providers")
 @Tag(name = "ParameterProviders")
 public class ParameterProviderResource extends AbstractParameterResource {
@@ -152,6 +157,7 @@ public class ParameterProviderResource extends AbstractParameterResource {
     @Context
     private ServletContext servletContext;
 
+    @PostConstruct
     public void init() {
         parameterUpdateManager = new ParameterUpdateManager(serviceFacade, dtoFactory, authorizer, this);
     }
@@ -1687,28 +1693,24 @@ public class ParameterProviderResource extends AbstractParameterResource {
         }
     }
 
-    // setters
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(final Authorizer authorizer) {
         this.authorizer = authorizer;
     }
 
-    public ComponentLifecycle getClusterComponentLifecycle() {
-        return clusterComponentLifecycle;
-    }
-
+    @Qualifier("clusterComponentLifecycle")
+    @Autowired(required = false)
     public void setClusterComponentLifecycle(final ComponentLifecycle clusterComponentLifecycle) {
         this.clusterComponentLifecycle = clusterComponentLifecycle;
     }
 
-    public ComponentLifecycle getLocalComponentLifecycle() {
-        return localComponentLifecycle;
-    }
-
+    @Qualifier("localComponentLifecycle")
+    @Autowired
     public void setLocalComponentLifecycle(final ComponentLifecycle localComponentLifecycle) {
         this.localComponentLifecycle = localComponentLifecycle;
     }
@@ -1717,6 +1719,7 @@ public class ParameterProviderResource extends AbstractParameterResource {
         return dtoFactory;
     }
 
+    @Autowired
     public void setDtoFactory(DtoFactory dtoFactory) {
         this.dtoFactory = dtoFactory;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessGroupResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessGroupResource.java
index 60743c053e..cacd04a298 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessGroupResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessGroupResource.java
@@ -136,10 +136,13 @@ import org.apache.nifi.web.util.ParameterContextReplacer;
 import org.glassfish.jersey.media.multipart.FormDataParam;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing a Group.
  */
+@Controller
 @Path("/process-groups")
 @Tag(name = "ProcessGroups")
 public class ProcessGroupResource extends FlowUpdateResource<ProcessGroupImportEntity, ProcessGroupReplaceRequestEntity> {
@@ -3105,40 +3108,47 @@ public class ProcessGroupResource extends FlowUpdateResource<ProcessGroupImportE
         }
     }
 
-    // setters
-
+    @Autowired
     public void setProcessorResource(ProcessorResource processorResource) {
         this.processorResource = processorResource;
     }
 
+    @Autowired
     public void setInputPortResource(InputPortResource inputPortResource) {
         this.inputPortResource = inputPortResource;
     }
 
+    @Autowired
     public void setOutputPortResource(OutputPortResource outputPortResource) {
         this.outputPortResource = outputPortResource;
     }
 
+    @Autowired
     public void setFunnelResource(FunnelResource funnelResource) {
         this.funnelResource = funnelResource;
     }
 
+    @Autowired
     public void setLabelResource(LabelResource labelResource) {
         this.labelResource = labelResource;
     }
 
+    @Autowired
     public void setRemoteProcessGroupResource(RemoteProcessGroupResource remoteProcessGroupResource) {
         this.remoteProcessGroupResource = remoteProcessGroupResource;
     }
 
+    @Autowired
     public void setConnectionResource(ConnectionResource connectionResource) {
         this.connectionResource = connectionResource;
     }
 
+    @Autowired
     public void setControllerServiceResource(ControllerServiceResource controllerServiceResource) {
         this.controllerServiceResource = controllerServiceResource;
     }
 
+    @Autowired
     public void setParameterContextReplacer(ParameterContextReplacer parameterContextReplacer) {
         this.parameterContextReplacer = parameterContextReplacer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessorResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessorResource.java
index 703e160d35..f29e303897 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessorResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProcessorResource.java
@@ -91,10 +91,13 @@ import org.apache.nifi.web.api.request.ClientIdParameter;
 import org.apache.nifi.web.api.request.LongParameter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing a Processor.
  */
+@Controller
 @Path("/processors")
 @Tag(name = "Processors")
 public class ProcessorResource extends ApplicationResource {
@@ -1134,12 +1137,12 @@ public class ProcessorResource extends ApplicationResource {
         return entity;
     }
 
-    // setters
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProvenanceEventResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProvenanceEventResource.java
index fffa46eea9..bd93c4923e 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProvenanceEventResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProvenanceEventResource.java
@@ -61,6 +61,8 @@ import org.apache.nifi.web.api.request.LongParameter;
 import org.apache.nifi.web.util.ResponseBuilderUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -71,6 +73,7 @@ import java.util.Collections;
 /**
  * RESTful endpoint for querying data provenance.
  */
+@Controller
 @Path("/provenance-events")
 @Tag(name = "ProvenanceEvents")
 public class ProvenanceEventResource extends ApplicationResource {
@@ -536,12 +539,12 @@ public class ProvenanceEventResource extends ApplicationResource {
         return generateOkResponse(entity).build();
     }
 
-    // setters
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProvenanceResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProvenanceResource.java
index 6599db969e..47dc490eb3 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProvenanceResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ProvenanceResource.java
@@ -50,6 +50,8 @@ import org.apache.nifi.web.api.entity.ComponentEntity;
 import org.apache.nifi.web.api.entity.LineageEntity;
 import org.apache.nifi.web.api.entity.ProvenanceEntity;
 import org.apache.nifi.web.api.entity.ProvenanceOptionsEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 import java.net.URI;
 import java.util.HashMap;
@@ -59,6 +61,7 @@ import java.util.Map;
 /**
  * RESTful endpoint for querying data provenance.
  */
+@Controller
 @Path("/provenance")
 @Tag(name = "Provenance")
 public class ProvenanceResource extends ApplicationResource {
@@ -602,12 +605,12 @@ public class ProvenanceResource extends ApplicationResource {
         );
     }
 
-    // setters
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/RemoteProcessGroupResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/RemoteProcessGroupResource.java
index 70f1ac13c3..8cf903c388 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/RemoteProcessGroupResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/RemoteProcessGroupResource.java
@@ -62,10 +62,13 @@ import org.apache.nifi.web.api.entity.RemoteProcessGroupPortEntity;
 import org.apache.nifi.web.api.entity.RemoteProcessGroupsEntity;
 import org.apache.nifi.web.api.request.ClientIdParameter;
 import org.apache.nifi.web.api.request.LongParameter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing a Remote group.
  */
+@Controller
 @Path("/remote-process-groups")
 @Tag(name = "RemoteProcessGroups")
 public class RemoteProcessGroupResource extends ApplicationResource {
@@ -977,12 +980,12 @@ public class RemoteProcessGroupResource extends ApplicationResource {
         return "TRANSMITTING".equals(requestRemotePortRunStatusEntity.getState());
     }
 
-    // setters
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java
index 452022e0ac..d85609c4b8 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ReportingTaskResource.java
@@ -83,10 +83,13 @@ import org.apache.nifi.web.api.request.ClientIdParameter;
 import org.apache.nifi.web.api.request.LongParameter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for managing a Reporting Task.
  */
+@Controller
 @Path("/reporting-tasks")
 @Tag(name = "ReportingTasks")
 public class ReportingTaskResource extends ApplicationResource {
@@ -935,12 +938,12 @@ public class ReportingTaskResource extends ApplicationResource {
         return dto;
     }
 
-    // setters
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ResourceResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ResourceResource.java
index ef96604ba2..fa0739443a 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ResourceResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ResourceResource.java
@@ -39,10 +39,13 @@ import org.apache.nifi.authorization.user.NiFiUserUtils;
 import org.apache.nifi.web.NiFiServiceFacade;
 import org.apache.nifi.web.api.dto.ResourceDTO;
 import org.apache.nifi.web.api.entity.ResourcesEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for retrieving system diagnostics.
  */
+@Controller
 @Path("/resources")
 @Tag(name = "Resources")
 public class ResourceResource extends ApplicationResource {
@@ -96,12 +99,12 @@ public class ResourceResource extends ApplicationResource {
         return generateOkResponse(entity).build();
     }
 
-    // setters
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SiteToSiteResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SiteToSiteResource.java
index 0cfb22c1e3..b3acee8a87 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SiteToSiteResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SiteToSiteResource.java
@@ -63,12 +63,15 @@ import org.apache.nifi.web.api.entity.ControllerEntity;
 import org.apache.nifi.web.api.entity.PeersEntity;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 import static org.apache.commons.lang3.StringUtils.isEmpty;
 
 /**
  * RESTful endpoint for managing a SiteToSite connection.
  */
+@Controller
 @Path("/site-to-site")
 @Tag(name = "SiteToSite")
 public class SiteToSiteResource extends ApplicationResource {
@@ -304,14 +307,17 @@ public class SiteToSiteResource extends ApplicationResource {
         return isEmpty(remoteInputHost) ? localName : remoteInputHost;
     }
 
+    @Autowired
     public void setServiceFacade(final NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
 
+    @Autowired
     @Override
     public void setClusterCoordinator(final ClusterCoordinator clusterCoordinator) {
         super.setClusterCoordinator(clusterCoordinator);
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SnippetResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SnippetResource.java
index bcf951976e..c39e4453e1 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SnippetResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SnippetResource.java
@@ -57,10 +57,13 @@ import org.apache.nifi.web.Revision;
 import org.apache.nifi.web.api.dto.SnippetDTO;
 import org.apache.nifi.web.api.entity.ComponentEntity;
 import org.apache.nifi.web.api.entity.SnippetEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for querying dataflow snippets.
  */
+@Controller
 @Path("/snippets")
 @Tag(name = "Snippets")
 public class SnippetResource extends ApplicationResource {
@@ -367,12 +370,12 @@ public class SnippetResource extends ApplicationResource {
         );
     }
 
-    /* setters */
-
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SystemDiagnosticsResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SystemDiagnosticsResource.java
index 033245b4a9..109d940786 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SystemDiagnosticsResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/SystemDiagnosticsResource.java
@@ -47,10 +47,13 @@ import org.apache.nifi.web.api.dto.SystemDiagnosticsDTO;
 import org.apache.nifi.web.api.entity.JmxMetricsResultsEntity;
 import org.apache.nifi.web.api.entity.SystemDiagnosticsEntity;
 import org.apache.nifi.web.api.metrics.jmx.JmxMetricsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
 
 /**
  * RESTful endpoint for retrieving system diagnostics.
  */
+@Controller
 @Path("/system-diagnostics")
 @Tag(name = "SystemDiagnostics")
 public class SystemDiagnosticsResource extends ApplicationResource {
@@ -192,14 +195,17 @@ public class SystemDiagnosticsResource extends ApplicationResource {
         });
     }
 
+    @Autowired
     public void setServiceFacade(NiFiServiceFacade serviceFacade) {
         this.serviceFacade = serviceFacade;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
 
+    @Autowired
     public void setJmxMetricsService(final JmxMetricsService jmxMetricsService) {
         this.jmxMetricsService = jmxMetricsService;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/TenantsResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/TenantsResource.java
index 1116a9f407..8b67ef4746 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/TenantsResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/TenantsResource.java
@@ -64,7 +64,9 @@ import org.apache.nifi.web.api.entity.UsersEntity;
 import org.apache.nifi.web.api.request.ClientIdParameter;
 import org.apache.nifi.web.api.request.LongParameter;
 import org.apache.nifi.web.dao.AccessPolicyDAO;
+import org.springframework.stereotype.Controller;
 
+@Controller
 @Path("tenants")
 @Tag(name = "Tenants")
 public class TenantsResource extends ApplicationResource {
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/VersionsResource.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/VersionsResource.java
index db133de8a6..1262dec70c 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/VersionsResource.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/VersionsResource.java
@@ -85,7 +85,9 @@ import org.apache.nifi.web.api.request.LongParameter;
 import org.apache.nifi.web.util.ComponentLifecycle;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
 
+@Controller
 @Path("/versions")
 @Tag(name = "Versions")
 public class VersionsResource extends FlowUpdateResource<VersionControlInformationEntity, VersionedFlowUpdateRequestEntity> {
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/configuration/WebApplicationConfiguration.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/configuration/WebApplicationConfiguration.java
new file mode 100644
index 0000000000..56c64b8217
--- /dev/null
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/configuration/WebApplicationConfiguration.java
@@ -0,0 +1,282 @@
+/*
+ * 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.nifi.web.configuration;
+
+import org.apache.nifi.admin.service.AuditService;
+import org.apache.nifi.audit.NiFiAuditor;
+import org.apache.nifi.authorization.Authorizer;
+import org.apache.nifi.authorization.StandardAuthorizableLookup;
+import org.apache.nifi.cluster.coordination.ClusterCoordinator;
+import org.apache.nifi.cluster.coordination.http.replication.RequestReplicator;
+import org.apache.nifi.controller.FlowController;
+import org.apache.nifi.controller.StandardReloadComponent;
+import org.apache.nifi.controller.service.ControllerServiceProvider;
+import org.apache.nifi.manifest.RuntimeManifestService;
+import org.apache.nifi.nar.ExtensionManager;
+import org.apache.nifi.reporting.BulletinRepository;
+import org.apache.nifi.services.FlowService;
+import org.apache.nifi.util.NiFiProperties;
+import org.apache.nifi.web.ContentAccess;
+import org.apache.nifi.web.NiFiServiceFacade;
+import org.apache.nifi.web.NiFiServiceFacadeLock;
+import org.apache.nifi.web.NiFiWebConfigurationContext;
+import org.apache.nifi.web.StandardNiFiContentAccess;
+import org.apache.nifi.web.StandardNiFiServiceFacade;
+import org.apache.nifi.web.StandardNiFiWebConfigurationContext;
+import org.apache.nifi.web.api.ApplicationResource;
+import org.apache.nifi.web.api.dto.DtoFactory;
+import org.apache.nifi.web.api.dto.EntityFactory;
+import org.apache.nifi.web.api.metrics.jmx.JmxMetricsCollector;
+import org.apache.nifi.web.api.metrics.jmx.JmxMetricsResultConverter;
+import org.apache.nifi.web.api.metrics.jmx.JmxMetricsService;
+import org.apache.nifi.web.api.metrics.jmx.StandardJmxMetricsService;
+import org.apache.nifi.web.controller.ControllerFacade;
+import org.apache.nifi.web.controller.ControllerSearchService;
+import org.apache.nifi.web.dao.AccessPolicyDAO;
+import org.apache.nifi.web.dao.impl.ComponentDAO;
+import org.apache.nifi.web.revision.RevisionManager;
+import org.apache.nifi.web.search.query.RegexSearchQueryParser;
+import org.apache.nifi.web.search.resultenrichment.ComponentSearchResultEnricherFactory;
+import org.apache.nifi.web.util.ClusterReplicationComponentLifecycle;
+import org.apache.nifi.web.util.LocalComponentLifecycle;
+import org.apache.nifi.web.util.ParameterContextNameCollisionResolver;
+import org.apache.nifi.web.util.ParameterContextReplacer;
+import org.apache.nifi.web.util.SnippetUtils;
+import org.apache.nifi.web.util.VirtualThreadParallelProcessingService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.context.annotation.Import;
+
+@ComponentScan(basePackageClasses = {
+        ComponentDAO.class,
+        NiFiAuditor.class,
+        ApplicationResource.class
+})
+@Import({
+        StandardAuthorizableLookup.class,
+        StandardNiFiServiceFacade.class
+})
+@EnableAspectJAutoProxy(proxyTargetClass = true)
+@Configuration
+public class WebApplicationConfiguration {
+
+    private final Authorizer authorizer;
+
+    private final AccessPolicyDAO accessPolicyDao;
+
+    private final AuditService auditService;
+
+    private final BulletinRepository bulletinRepository;
+
+    private final ExtensionManager extensionManager;
+
+    private final FlowController flowController;
+
+    private final FlowService flowService;
+
+    private final NiFiProperties properties;
+
+    private final RevisionManager revisionManager;
+
+    private final RuntimeManifestService runtimeManifestService;
+
+    private ClusterCoordinator clusterCoordinator;
+
+    private RequestReplicator requestReplicator;
+
+    private NiFiServiceFacade serviceFacade;
+
+    public WebApplicationConfiguration(
+            final Authorizer authorizer,
+            final AccessPolicyDAO accessPolicyDao,
+            final AuditService auditService,
+            final BulletinRepository bulletinRepository,
+            final ExtensionManager extensionManager,
+            final FlowController flowController,
+            final FlowService flowService,
+            final NiFiProperties properties,
+            final RevisionManager revisionManager,
+            final RuntimeManifestService runtimeManifestService
+    ) {
+        this.authorizer = authorizer;
+        this.accessPolicyDao = accessPolicyDao;
+        this.auditService = auditService;
+        this.bulletinRepository = bulletinRepository;
+        this.extensionManager = extensionManager;
+        this.flowController = flowController;
+        this.flowService = flowService;
+        this.properties = properties;
+        this.revisionManager = revisionManager;
+        this.runtimeManifestService = runtimeManifestService;
+    }
+
+    @Autowired(required = false)
+    public void setClusterCoordinator(final ClusterCoordinator clusterCoordinator) {
+        this.clusterCoordinator = clusterCoordinator;
+    }
+
+    @Autowired(required = false)
+    public void setRequestReplicator(final RequestReplicator requestReplicator) {
+        this.requestReplicator = requestReplicator;
+    }
+
+    @Autowired
+    public void setServiceFacade(final NiFiServiceFacade serviceFacade) {
+        this.serviceFacade = serviceFacade;
+    }
+
+    @Bean
+    public EntityFactory entityFactory() {
+        return new EntityFactory();
+    }
+
+    @Bean
+    public ContentAccess contentAccess() {
+        final StandardNiFiContentAccess contentAccess = new StandardNiFiContentAccess();
+        contentAccess.setClusterCoordinator(clusterCoordinator);
+        contentAccess.setProperties(properties);
+        contentAccess.setRequestReplicator(requestReplicator);
+        contentAccess.setServiceFacade(serviceFacade);
+        return contentAccess;
+    }
+
+    @Bean
+    public DtoFactory dtoFactory() {
+        final DtoFactory dtoFactory = new DtoFactory();
+        dtoFactory.setAuthorizer(authorizer);
+        dtoFactory.setBulletinRepository(bulletinRepository);
+        dtoFactory.setControllerServiceProvider(flowController.getControllerServiceProvider());
+        dtoFactory.setEntityFactory(entityFactory());
+        dtoFactory.setExtensionManager(extensionManager);
+        return dtoFactory;
+    }
+
+    @Bean
+    public ControllerServiceProvider controllerServiceProvider() {
+        return flowController.getControllerServiceProvider();
+    }
+
+    @Bean
+    public SnippetUtils snippetUtils() {
+        final SnippetUtils snippetUtils = new SnippetUtils();
+        snippetUtils.setDtoFactory(dtoFactory());
+        snippetUtils.setFlowController(flowController);
+        snippetUtils.setAccessPolicyDAO(accessPolicyDao);
+        return snippetUtils;
+    }
+
+    @Bean
+    public NiFiServiceFacadeLock serviceFacadeLock() {
+        return new NiFiServiceFacadeLock();
+    }
+
+    @Bean
+    public ClusterReplicationComponentLifecycle clusterComponentLifecycle() {
+        final ClusterReplicationComponentLifecycle lifecycle = new ClusterReplicationComponentLifecycle();
+        lifecycle.setClusterCoordinator(clusterCoordinator);
+        lifecycle.setDtoFactory(dtoFactory());
+        lifecycle.setRequestReplicator(requestReplicator);
+        lifecycle.setServiceFacade(serviceFacade);
+        return lifecycle;
+    }
+
+    @Bean
+    public LocalComponentLifecycle localComponentLifecycle() {
+        final LocalComponentLifecycle lifecycle = new LocalComponentLifecycle();
+        lifecycle.setDtoFactory(dtoFactory());
+        lifecycle.setServiceFacade(serviceFacade);
+        lifecycle.setRevisionManager(revisionManager);
+        return lifecycle;
+    }
+
+    @Bean
+    public VirtualThreadParallelProcessingService parallelProcessingService() {
+        return new VirtualThreadParallelProcessingService(properties);
+    }
+
+    @Bean
+    public JmxMetricsService jmxMetricsService() {
+        final JmxMetricsResultConverter metricsResultConverter = new JmxMetricsResultConverter();
+        final JmxMetricsCollector metricsCollector = new JmxMetricsCollector(metricsResultConverter);
+        final StandardJmxMetricsService jmxMetricsService = new StandardJmxMetricsService();
+        jmxMetricsService.setMetricsCollector(metricsCollector);
+        jmxMetricsService.setProperties(properties);
+        return jmxMetricsService;
+    }
+
+    @Bean
+    public ParameterContextReplacer parameterContextReplacer() {
+        final ParameterContextNameCollisionResolver nameCollisionResolver = new ParameterContextNameCollisionResolver();
+        return new ParameterContextReplacer(nameCollisionResolver);
+    }
+
+    @Bean
+    public RegexSearchQueryParser searchQueryParser() {
+        return new RegexSearchQueryParser();
+    }
+
+    @Bean
+    public ComponentSearchResultEnricherFactory resultEnricherFactory() {
+        final ComponentSearchResultEnricherFactory factory = new ComponentSearchResultEnricherFactory();
+        factory.setAuthorizer(authorizer);
+        return factory;
+    }
+
+    @Bean
+    public StandardReloadComponent reloadComponent() {
+        return new StandardReloadComponent(flowController);
+    }
+
+    @Bean
+    public ControllerSearchService controllerSearchService() {
+        final ControllerSearchService controllerSearchService = new ControllerSearchService();
+        controllerSearchService.setAuthorizer(authorizer);
+        controllerSearchService.setFlowController(flowController);
+        controllerSearchService.setResultEnricherFactory(resultEnricherFactory());
+        return controllerSearchService;
+    }
+
+    @Bean
+    public NiFiWebConfigurationContext nifiWebConfigurationContext() {
+        final StandardNiFiWebConfigurationContext context = new StandardNiFiWebConfigurationContext();
+        context.setAuthorizer(authorizer);
+        context.setAuditService(auditService);
+        context.setProperties(properties);
+        context.setClusterCoordinator(clusterCoordinator);
+        context.setControllerServiceProvider(flowController.getControllerServiceProvider());
+        context.setRequestReplicator(requestReplicator);
+        context.setReportingTaskProvider(flowController);
+        context.setServiceFacade(serviceFacade);
+        return context;
+    }
+
+    @Bean
+    public ControllerFacade controllerFacade() {
+        final ControllerFacade controllerFacade = new ControllerFacade();
+        controllerFacade.setAuthorizer(authorizer);
+        controllerFacade.setFlowController(flowController);
+        controllerFacade.setDtoFactory(dtoFactory());
+        controllerFacade.setProperties(properties);
+        controllerFacade.setFlowService(flowService);
+        controllerFacade.setRuntimeManifestService(runtimeManifestService);
+        controllerFacade.setSearchQueryParser(searchQueryParser());
+        return controllerFacade;
+    }
+}
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/configuration/WebRevisionConfiguration.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/configuration/WebRevisionConfiguration.java
new file mode 100644
index 0000000000..93e6225aa4
--- /dev/null
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/configuration/WebRevisionConfiguration.java
@@ -0,0 +1,38 @@
+/*
+ * 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.nifi.web.configuration;
+
+import org.apache.nifi.web.revision.NaiveRevisionManager;
+import org.apache.nifi.web.revision.RevisionManager;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Web Revision Configuration stands alone to support Revision Manager integration with framework and web components
+ */
+@Configuration
+public class WebRevisionConfiguration {
+    /**
+     * Revision Manager required for integration with Flow Controller operations
+     *
+     * @return Revision Manager
+     */
+    @Bean
+    public RevisionManager revisionManager() {
+        return new NaiveRevisionManager();
+    }
+}
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/configuration/WebSearchConfiguration.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/configuration/WebSearchConfiguration.java
new file mode 100644
index 0000000000..f7230e249b
--- /dev/null
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/configuration/WebSearchConfiguration.java
@@ -0,0 +1,157 @@
+/*
+ * 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.nifi.web.configuration;
+
+import org.apache.nifi.authorization.Authorizer;
+import org.apache.nifi.controller.FlowController;
+import org.apache.nifi.web.controller.ControllerSearchService;
+import org.apache.nifi.web.search.ComponentMatcherFactory;
+import org.apache.nifi.web.search.attributematchers.BackPressureMatcher;
+import org.apache.nifi.web.search.attributematchers.BasicMatcher;
+import org.apache.nifi.web.search.attributematchers.ConnectionMatcher;
+import org.apache.nifi.web.search.attributematchers.ConnectionRelationshipMatcher;
+import org.apache.nifi.web.search.attributematchers.ConnectivityMatcher;
+import org.apache.nifi.web.search.attributematchers.ControllerServiceNodeMatcher;
+import org.apache.nifi.web.search.attributematchers.ExecutionMatcher;
+import org.apache.nifi.web.search.attributematchers.ExpirationMatcher;
+import org.apache.nifi.web.search.attributematchers.ExtendedMatcher;
+import org.apache.nifi.web.search.attributematchers.LabelMatcher;
+import org.apache.nifi.web.search.attributematchers.ParameterContextMatcher;
+import org.apache.nifi.web.search.attributematchers.ParameterMatcher;
+import org.apache.nifi.web.search.attributematchers.ParameterProviderNodeMatcher;
+import org.apache.nifi.web.search.attributematchers.PortScheduledStateMatcher;
+import org.apache.nifi.web.search.attributematchers.PrioritiesMatcher;
+import org.apache.nifi.web.search.attributematchers.ProcessGroupMatcher;
+import org.apache.nifi.web.search.attributematchers.ProcessorMetadataMatcher;
+import org.apache.nifi.web.search.attributematchers.PropertyMatcher;
+import org.apache.nifi.web.search.attributematchers.RelationshipMatcher;
+import org.apache.nifi.web.search.attributematchers.RemoteProcessGroupMatcher;
+import org.apache.nifi.web.search.attributematchers.ScheduledStateMatcher;
+import org.apache.nifi.web.search.attributematchers.SchedulingMatcher;
+import org.apache.nifi.web.search.attributematchers.SearchableMatcher;
+import org.apache.nifi.web.search.attributematchers.TargetUriMatcher;
+import org.apache.nifi.web.search.attributematchers.TransmissionStatusMatcher;
+import org.apache.nifi.web.search.resultenrichment.ComponentSearchResultEnricherFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.List;
+
+@Configuration
+public class WebSearchConfiguration {
+
+    private final Authorizer authorizer;
+
+    private final FlowController flowController;
+
+    private final ComponentSearchResultEnricherFactory resultEnricherFactory;
+
+    public WebSearchConfiguration(
+            final Authorizer authorizer,
+            final FlowController flowController,
+            final ComponentSearchResultEnricherFactory resultEnricherFactory
+    ) {
+        this.authorizer = authorizer;
+        this.flowController = flowController;
+        this.resultEnricherFactory = resultEnricherFactory;
+    }
+
+    @Bean
+    public ControllerSearchService controllerSearchService() {
+        final ControllerSearchService controllerSearchService = new ControllerSearchService();
+
+        controllerSearchService.setAuthorizer(authorizer);
+        controllerSearchService.setFlowController(flowController);
+        controllerSearchService.setResultEnricherFactory(resultEnricherFactory);
+        final ComponentMatcherFactory factory = new ComponentMatcherFactory();
+
+        controllerSearchService.setMatcherForConnection(factory.getInstanceForConnection(
+                List.of(
+                        new ConnectionMatcher(),
+                        new ConnectionRelationshipMatcher(),
+                        new PrioritiesMatcher(),
+                        new ExpirationMatcher(),
+                        new BackPressureMatcher(),
+                        new ConnectivityMatcher()
+                )
+        ));
+        controllerSearchService.setMatcherForControllerServiceNode(factory.getInstanceForControllerServiceNode(
+                List.of(
+                        new ControllerServiceNodeMatcher(),
+                        new PropertyMatcher<>()
+                )
+        ));
+        controllerSearchService.setMatcherForFunnel(factory.getInstanceForConnectable(
+                List.of(
+                        new BasicMatcher<>()
+                )
+        ));
+        controllerSearchService.setMatcherForProcessGroup(factory.getInstanceForProcessGroup(
+                List.of(
+                        new ProcessGroupMatcher()
+                )
+        ));
+        controllerSearchService.setMatcherForRemoteProcessGroup(factory.getInstanceForRemoteProcessGroup(
+                List.of(
+                        new RemoteProcessGroupMatcher(),
+                        new TargetUriMatcher(),
+                        new TransmissionStatusMatcher()
+                )
+        ));
+        controllerSearchService.setMatcherForLabel(factory.getInstanceForLabel(
+                List.of(
+                        new LabelMatcher()
+                )
+        ));
+        controllerSearchService.setMatcherForParameter(factory.getInstanceForParameter(
+                List.of(
+                        new ParameterMatcher())
+                )
+        );
+        controllerSearchService.setMatcherForParameterContext(factory.getInstanceForParameterContext(
+                List.of(
+                        new ParameterContextMatcher()
+                )
+        ));
+        controllerSearchService.setMatcherForParameterProviderNode(factory.getInstanceForParameterProviderNode(
+                List.of(
+                        new ParameterProviderNodeMatcher(),
+                        new PropertyMatcher<>()
+                )
+        ));
+        controllerSearchService.setMatcherForPort(factory.getInstanceForConnectable(
+                List.of(
+                        new ExtendedMatcher<>(),
+                        new PortScheduledStateMatcher()
+                )
+        ));
+        controllerSearchService.setMatcherForProcessor(factory.getInstanceForConnectable(
+                List.of(
+                        new ExtendedMatcher<>(),
+                        new SchedulingMatcher(),
+                        new ExecutionMatcher(),
+                        new ScheduledStateMatcher(),
+                        new RelationshipMatcher<>(),
+                        new ProcessorMetadataMatcher(),
+                        new PropertyMatcher<>(),
+                        new SearchableMatcher()
+                )
+        ));
+
+        return controllerSearchService;
+    }
+}
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/AbstractPortDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/AbstractPortDAO.java
index 3d55ae929e..969758ad53 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/AbstractPortDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/AbstractPortDAO.java
@@ -29,6 +29,7 @@ import org.apache.nifi.web.api.dto.PortDTO;
 import org.apache.nifi.web.dao.PortDAO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -196,7 +197,7 @@ public abstract class AbstractPortDAO extends ComponentDAO implements PortDAO {
         inputPort.verifyCanDelete();
     }
 
-    /* setters */
+    @Autowired
     public void setFlowController(FlowController flowController) {
         this.flowController = flowController;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardComponentStateDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardComponentStateDAO.java
index 76b06c5cca..f7c8ab7062 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardComponentStateDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardComponentStateDAO.java
@@ -28,9 +28,12 @@ import org.apache.nifi.controller.service.ControllerServiceNode;
 import org.apache.nifi.groups.RemoteProcessGroup;
 import org.apache.nifi.web.ResourceNotFoundException;
 import org.apache.nifi.web.dao.ComponentStateDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 import java.io.IOException;
 
+@Repository
 public class StandardComponentStateDAO implements ComponentStateDAO {
 
     private StateManagerProvider stateManagerProvider;
@@ -118,8 +121,7 @@ public class StandardComponentStateDAO implements ComponentStateDAO {
         return getState(remoteProcessGroup.getIdentifier(), scope);
     }
 
-    /* setters */
-
+    @Autowired
     public void setStateManagerProvider(final StateManagerProvider stateManagerProvider) {
         this.stateManagerProvider = stateManagerProvider;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardConnectionDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardConnectionDAO.java
index 71d26712f5..e807257b4b 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardConnectionDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardConnectionDAO.java
@@ -54,6 +54,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import jakarta.ws.rs.WebApplicationException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -65,6 +68,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.regex.Matcher;
 
+@Repository
 public class StandardConnectionDAO extends ComponentDAO implements ConnectionDAO {
 
     private static final Logger logger = LoggerFactory.getLogger(StandardConnectionDAO.class);
@@ -682,11 +686,12 @@ public class StandardConnectionDAO extends ComponentDAO implements ConnectionDAO
         }
     }
 
-    /* setters */
+    @Autowired
     public void setFlowController(final FlowController flowController) {
         this.flowController = flowController;
     }
 
+    @Autowired
     public void setAuthorizer(Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardControllerServiceDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardControllerServiceDAO.java
index 46751f78f5..2359af9612 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardControllerServiceDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardControllerServiceDAO.java
@@ -49,6 +49,8 @@ import org.apache.nifi.web.api.dto.ConfigVerificationResultDTO;
 import org.apache.nifi.web.api.dto.ControllerServiceDTO;
 import org.apache.nifi.web.dao.ComponentStateDAO;
 import org.apache.nifi.web.dao.ControllerServiceDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 import java.net.URL;
 import java.util.ArrayList;
@@ -58,6 +60,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+@Repository
 public class StandardControllerServiceDAO extends ComponentDAO implements ControllerServiceDAO {
 
     private ControllerServiceProvider serviceProvider;
@@ -452,15 +455,17 @@ public class StandardControllerServiceDAO extends ComponentDAO implements Contro
         componentStateDAO.clearState(controllerService);
     }
 
-    /* setters */
+    @Autowired
     public void setServiceProvider(final ControllerServiceProvider serviceProvider) {
         this.serviceProvider = serviceProvider;
     }
 
+    @Autowired
     public void setComponentStateDAO(final ComponentStateDAO componentStateDAO) {
         this.componentStateDAO = componentStateDAO;
     }
 
+    @Autowired
     public void setFlowController(final FlowController flowController) {
         this.flowController = flowController;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFlowAnalysisRuleDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFlowAnalysisRuleDAO.java
index 50ad24d165..b1bce275c2 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFlowAnalysisRuleDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFlowAnalysisRuleDAO.java
@@ -47,6 +47,8 @@ import org.apache.nifi.web.api.dto.ConfigVerificationResultDTO;
 import org.apache.nifi.web.api.dto.FlowAnalysisRuleDTO;
 import org.apache.nifi.web.dao.ComponentStateDAO;
 import org.apache.nifi.web.dao.FlowAnalysisRuleDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 import java.net.URL;
 import java.util.ArrayList;
@@ -56,6 +58,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+@Repository
 public class StandardFlowAnalysisRuleDAO extends ComponentDAO implements FlowAnalysisRuleDAO {
 
     private FlowAnalysisRuleProvider flowAnalysisRuleProvider;
@@ -358,19 +361,22 @@ public class StandardFlowAnalysisRuleDAO extends ComponentDAO implements FlowAna
         componentStateDAO.clearState(flowAnalysisRule);
     }
 
-    /* setters */
+    @Autowired
     public void setFlowAnalysisRuleProvider(FlowAnalysisRuleProvider flowAnalysisRuleProvider) {
         this.flowAnalysisRuleProvider = flowAnalysisRuleProvider;
     }
 
+    @Autowired
     public void setComponentStateDAO(ComponentStateDAO componentStateDAO) {
         this.componentStateDAO = componentStateDAO;
     }
 
+    @Autowired
     public void setReloadComponent(ReloadComponent reloadComponent) {
         this.reloadComponent = reloadComponent;
     }
 
+    @Autowired
     public void setFlowController(FlowController flowController) {
         this.flowController = flowController;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFlowRegistryDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFlowRegistryDAO.java
index 430f90265f..a921985aaa 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFlowRegistryDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFlowRegistryDAO.java
@@ -33,6 +33,8 @@ import org.apache.nifi.web.NiFiCoreException;
 import org.apache.nifi.web.ResourceNotFoundException;
 import org.apache.nifi.web.api.dto.FlowRegistryClientDTO;
 import org.apache.nifi.web.dao.FlowRegistryDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 import java.io.IOException;
 import java.util.Collections;
@@ -42,6 +44,7 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.TreeSet;
 
+@Repository
 public class StandardFlowRegistryDAO extends ComponentDAO implements FlowRegistryDAO {
     private FlowController flowController;
 
@@ -223,6 +226,7 @@ public class StandardFlowRegistryDAO extends ComponentDAO implements FlowRegistr
         return flowRegistry;
     }
 
+    @Autowired
     public void setFlowController(final FlowController flowController) {
         this.flowController = flowController;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFunnelDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFunnelDAO.java
index ddc5b4f87b..186aa09a97 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFunnelDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFunnelDAO.java
@@ -23,9 +23,12 @@ import org.apache.nifi.groups.ProcessGroup;
 import org.apache.nifi.web.ResourceNotFoundException;
 import org.apache.nifi.web.api.dto.FunnelDTO;
 import org.apache.nifi.web.dao.FunnelDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 import java.util.Set;
 
+@Repository
 public class StandardFunnelDAO extends ComponentDAO implements FunnelDAO {
 
     private FlowController flowController;
@@ -111,7 +114,7 @@ public class StandardFunnelDAO extends ComponentDAO implements FunnelDAO {
         funnel.getProcessGroup().removeFunnel(funnel);
     }
 
-    /* setters */
+    @Autowired
     public void setFlowController(FlowController flowController) {
         this.flowController = flowController;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardInputPortDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardInputPortDAO.java
index 9666ebe88e..401c7d2496 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardInputPortDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardInputPortDAO.java
@@ -24,9 +24,11 @@ import org.apache.nifi.remote.PublicPort;
 import org.apache.nifi.web.ResourceNotFoundException;
 import org.apache.nifi.web.api.dto.PortDTO;
 import org.apache.nifi.web.dao.PortDAO;
+import org.springframework.stereotype.Repository;
 
 import java.util.Set;
 
+@Repository
 public class StandardInputPortDAO extends AbstractPortDAO implements PortDAO {
 
     protected Port locatePort(final String portId) {
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardLabelDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardLabelDAO.java
index 3a51bc5960..696f691c1f 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardLabelDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardLabelDAO.java
@@ -24,9 +24,12 @@ import org.apache.nifi.groups.ProcessGroup;
 import org.apache.nifi.web.ResourceNotFoundException;
 import org.apache.nifi.web.api.dto.LabelDTO;
 import org.apache.nifi.web.dao.LabelDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 import java.util.Set;
 
+@Repository
 public class StandardLabelDAO extends ComponentDAO implements LabelDAO {
 
     private FlowController flowController;
@@ -121,7 +124,7 @@ public class StandardLabelDAO extends ComponentDAO implements LabelDAO {
         label.getProcessGroup().removeLabel(label);
     }
 
-    /* setters */
+    @Autowired
     public void setFlowController(FlowController flowController) {
         this.flowController = flowController;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardOutputPortDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardOutputPortDAO.java
index f23a716f9f..c54e82a108 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardOutputPortDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardOutputPortDAO.java
@@ -24,9 +24,11 @@ import org.apache.nifi.remote.PublicPort;
 import org.apache.nifi.web.ResourceNotFoundException;
 import org.apache.nifi.web.api.dto.PortDTO;
 import org.apache.nifi.web.dao.PortDAO;
+import org.springframework.stereotype.Repository;
 
 import java.util.Set;
 
+@Repository
 public class StandardOutputPortDAO extends AbstractPortDAO implements PortDAO {
 
     protected Port locatePort(final String portId) {
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardParameterContextDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardParameterContextDAO.java
index da039f0b65..a54332d5b7 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardParameterContextDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardParameterContextDAO.java
@@ -42,6 +42,8 @@ import org.apache.nifi.web.api.entity.ParameterContextReferenceEntity;
 import org.apache.nifi.web.api.entity.ParameterEntity;
 import org.apache.nifi.web.api.entity.ParameterProviderConfigurationEntity;
 import org.apache.nifi.web.dao.ParameterContextDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -53,6 +55,7 @@ import java.util.Set;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
+@Repository
 public class StandardParameterContextDAO implements ParameterContextDAO {
     private FlowManager flowManager;
     private Authorizer authorizer;
@@ -433,6 +436,7 @@ public class StandardParameterContextDAO implements ParameterContextDAO {
         });
     }
 
+    @Autowired
     public void setFlowController(final FlowController flowController) {
         this.flowManager = flowController.getFlowManager();
     }
@@ -442,6 +446,7 @@ public class StandardParameterContextDAO implements ParameterContextDAO {
         return rootGroup.findAllProcessGroups(group -> group.getParameterContext() != null && group.getParameterContext().getIdentifier().equals(parameterContextId));
     }
 
+    @Autowired
     public void setAuthorizer(final Authorizer authorizer) {
         this.authorizer = authorizer;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardParameterProviderDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardParameterProviderDAO.java
index d58f37905f..f301d79ff9 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardParameterProviderDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardParameterProviderDAO.java
@@ -45,6 +45,8 @@ import org.apache.nifi.web.api.dto.ConfigVerificationResultDTO;
 import org.apache.nifi.web.api.dto.ParameterProviderDTO;
 import org.apache.nifi.web.dao.ComponentStateDAO;
 import org.apache.nifi.web.dao.ParameterProviderDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 import java.net.URL;
 import java.util.Collection;
@@ -54,6 +56,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+@Repository
 public class StandardParameterProviderDAO extends ComponentDAO implements ParameterProviderDAO {
 
     private ComponentStateDAO componentStateDAO;
@@ -306,14 +309,17 @@ public class StandardParameterProviderDAO extends ComponentDAO implements Parame
         flowController.getFlowManager().removeParameterProvider(parameterProvider);
     }
 
+    @Autowired
     public void setComponentStateDAO(final ComponentStateDAO componentStateDAO) {
         this.componentStateDAO = componentStateDAO;
     }
 
+    @Autowired
     public void setReloadComponent(final ReloadComponent reloadComponent) {
         this.reloadComponent = reloadComponent;
     }
 
+    @Autowired
     public void setFlowController(final FlowController flowController) {
         this.flowController = flowController;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardPolicyBasedAuthorizerDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardPolicyBasedAuthorizerDAO.java
index 1d652147cc..ca530d3afd 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardPolicyBasedAuthorizerDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardPolicyBasedAuthorizerDAO.java
@@ -44,10 +44,12 @@ import org.apache.nifi.web.api.entity.TenantEntity;
 import org.apache.nifi.web.dao.AccessPolicyDAO;
 import org.apache.nifi.web.dao.UserDAO;
 import org.apache.nifi.web.dao.UserGroupDAO;
+import org.springframework.stereotype.Repository;
 
 import java.util.Set;
 import java.util.stream.Collectors;
 
+@Repository
 public class StandardPolicyBasedAuthorizerDAO implements AccessPolicyDAO, UserGroupDAO, UserDAO {
 
     private final AccessPolicyProvider accessPolicyProvider;
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardProcessGroupDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardProcessGroupDAO.java
index ca8b1c17c2..dc2c3630eb 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardProcessGroupDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardProcessGroupDAO.java
@@ -51,6 +51,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import jakarta.ws.rs.WebApplicationException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
+
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -60,6 +63,7 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+@Repository
 public class StandardProcessGroupDAO extends ComponentDAO implements ProcessGroupDAO {
     private static final Logger logger = LoggerFactory.getLogger(StandardProcessGroupDAO.class);
 
@@ -594,6 +598,7 @@ public class StandardProcessGroupDAO extends ComponentDAO implements ProcessGrou
         parentGroup.removeProcessGroup(group);
     }
 
+    @Autowired
     public void setFlowController(FlowController flowController) {
         this.flowController = flowController;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardProcessorDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardProcessorDAO.java
index 88af0005e2..1ad1a6e6ee 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardProcessorDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardProcessorDAO.java
@@ -55,7 +55,9 @@ import org.apache.nifi.web.api.dto.ProcessorConfigDTO;
 import org.apache.nifi.web.api.dto.ProcessorDTO;
 import org.apache.nifi.web.dao.ComponentStateDAO;
 import org.apache.nifi.web.dao.ProcessorDAO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.support.CronExpression;
+import org.springframework.stereotype.Repository;
 
 import java.net.URL;
 import java.util.ArrayList;
@@ -69,6 +71,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
 import java.util.stream.Collectors;
 
+@Repository
 public class StandardProcessorDAO extends ComponentDAO implements ProcessorDAO {
 
     private FlowController flowController;
@@ -612,11 +615,12 @@ public class StandardProcessorDAO extends ComponentDAO implements ProcessorDAO {
         componentStateDAO.clearState(processor);
     }
 
-    /* setters */
+    @Autowired
     public void setFlowController(FlowController flowController) {
         this.flowController = flowController;
     }
 
+    @Autowired
     public void setComponentStateDAO(ComponentStateDAO componentStateDAO) {
         this.componentStateDAO = componentStateDAO;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardRemoteProcessGroupDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardRemoteProcessGroupDAO.java
index f827211815..a0ea6b42cf 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardRemoteProcessGroupDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardRemoteProcessGroupDAO.java
@@ -35,6 +35,8 @@ import org.apache.nifi.web.api.dto.RemoteProcessGroupDTO;
 import org.apache.nifi.web.api.dto.RemoteProcessGroupPortDTO;
 import org.apache.nifi.web.dao.ComponentStateDAO;
 import org.apache.nifi.web.dao.RemoteProcessGroupDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -43,6 +45,7 @@ import java.util.regex.Matcher;
 
 import static org.apache.nifi.util.StringUtils.isEmpty;
 
+@Repository
 public class StandardRemoteProcessGroupDAO extends ComponentDAO implements RemoteProcessGroupDAO {
 
     private FlowController flowController;
@@ -475,10 +478,12 @@ public class StandardRemoteProcessGroupDAO extends ComponentDAO implements Remot
         return componentStateDAO.getState(remoteProcessGroup, scope);
     }
 
+    @Autowired
     public void setFlowController(FlowController flowController) {
         this.flowController = flowController;
     }
 
+    @Autowired
     public void setComponentStateDAO(ComponentStateDAO componentStateDAO) {
         this.componentStateDAO = componentStateDAO;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardReportingTaskDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardReportingTaskDAO.java
index 4d40f03dea..287946e746 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardReportingTaskDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardReportingTaskDAO.java
@@ -49,7 +49,9 @@ import org.apache.nifi.web.api.dto.ConfigVerificationResultDTO;
 import org.apache.nifi.web.api.dto.ReportingTaskDTO;
 import org.apache.nifi.web.dao.ComponentStateDAO;
 import org.apache.nifi.web.dao.ReportingTaskDAO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.support.CronExpression;
+import org.springframework.stereotype.Repository;
 
 import java.net.URL;
 import java.util.ArrayList;
@@ -61,6 +63,7 @@ import java.util.concurrent.RejectedExecutionException;
 import java.util.regex.Matcher;
 import java.util.stream.Collectors;
 
+@Repository
 public class StandardReportingTaskDAO extends ComponentDAO implements ReportingTaskDAO {
 
     private ReportingTaskProvider reportingTaskProvider;
@@ -411,19 +414,22 @@ public class StandardReportingTaskDAO extends ComponentDAO implements ReportingT
         componentStateDAO.clearState(reportingTask);
     }
 
-    /* setters */
+    @Autowired
     public void setReportingTaskProvider(ReportingTaskProvider reportingTaskProvider) {
         this.reportingTaskProvider = reportingTaskProvider;
     }
 
+    @Autowired
     public void setComponentStateDAO(ComponentStateDAO componentStateDAO) {
         this.componentStateDAO = componentStateDAO;
     }
 
+    @Autowired
     public void setReloadComponent(ReloadComponent reloadComponent) {
         this.reloadComponent = reloadComponent;
     }
 
+    @Autowired
     public void setFlowController(FlowController flowController) {
         this.flowController = flowController;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardSnippetDAO.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardSnippetDAO.java
index 41c671737d..1b6fbd7f3a 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardSnippetDAO.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardSnippetDAO.java
@@ -37,6 +37,8 @@ import org.apache.nifi.web.api.dto.RevisionDTO;
 import org.apache.nifi.web.api.dto.SnippetDTO;
 import org.apache.nifi.web.dao.SnippetDAO;
 import org.apache.nifi.web.util.SnippetUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 import java.util.HashMap;
 import java.util.LinkedHashSet;
@@ -44,6 +46,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
+@Repository
 public class StandardSnippetDAO implements SnippetDAO {
 
     private FlowController flowController;
@@ -350,11 +353,12 @@ public class StandardSnippetDAO implements SnippetDAO {
         }
     }
 
-    /* setters */
+    @Autowired
     public void setFlowController(FlowController flowController) {
         this.flowController = flowController;
     }
 
+    @Autowired
     public void setSnippetUtils(SnippetUtils snippetUtils) {
         this.snippetUtils = snippetUtils;
     }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/search/ComponentMatcherFactory.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/search/ComponentMatcherFactory.java
index 0c4e818db0..329255143b 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/search/ComponentMatcherFactory.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/search/ComponentMatcherFactory.java
@@ -33,7 +33,7 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 public class ComponentMatcherFactory {
-    public ComponentMatcher<Connectable> getInstanceForConnectable(final List<AttributeMatcher<Connectable>> attributeMatchers) {
+    public <T extends Connectable> ComponentMatcher<T> getInstanceForConnectable(final List<AttributeMatcher<T>> attributeMatchers) {
         return new AttributeBasedComponentMatcher<>(attributeMatchers, component -> component.getIdentifier(), component -> component.getName());
     }
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/search/attributematchers/PropertyMatcher.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/search/attributematchers/PropertyMatcher.java
index 6d3c08f845..6b24414e49 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/search/attributematchers/PropertyMatcher.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/search/attributematchers/PropertyMatcher.java
@@ -30,7 +30,7 @@ import java.util.Set;
 
 import static org.apache.nifi.web.search.attributematchers.AttributeMatcher.addIfMatching;
 
-public class PropertyMatcher implements AttributeMatcher<ComponentNode> {
+public class PropertyMatcher<T extends ComponentNode> implements AttributeMatcher<T> {
     private static final String LABEL_NAME = "Property name";
     private static final String LABEL_VALUE = "Property value";
     private static final String LABEL_DESCRIPTION = "Property description";
@@ -39,7 +39,7 @@ public class PropertyMatcher implements AttributeMatcher<ComponentNode> {
     private final static Set<String> FILTER_VALUES_PROPERTIES_EXCLUSION = new HashSet<>(Arrays.asList("no", "none", "false", "exclude", "0"));
 
     @Override
-    public void match(final ComponentNode component, final SearchQuery query, final List<String> matches) {
+    public void match(final T component, final SearchQuery query, final List<String> matches) {
         final String searchTerm = query.getTerm();
 
         if (!propertiesAreFilteredOut(query)) {
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/spring/ControllerServiceProviderFactoryBean.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/spring/ControllerServiceProviderFactoryBean.java
deleted file mode 100644
index 78f57298aa..0000000000
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/spring/ControllerServiceProviderFactoryBean.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.nifi.web.spring;
-
-import org.apache.nifi.controller.FlowController;
-import org.apache.nifi.controller.service.ControllerServiceProvider;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-
-/**
- *
- */
-public class ControllerServiceProviderFactoryBean implements FactoryBean<ControllerServiceProvider>, ApplicationContextAware {
-
-    private ApplicationContext context;
-    private ControllerServiceProvider controllerServiceProvider;
-
-    @Override
-    public ControllerServiceProvider getObject() throws Exception {
-        if (controllerServiceProvider == null) {
-            controllerServiceProvider = context.getBean("flowController", FlowController.class).getControllerServiceProvider();
-        }
-
-        return controllerServiceProvider;
-    }
-
-    @Override
-    public Class<ControllerServiceProvider> getObjectType() {
-        return ControllerServiceProvider.class;
-    }
-
-    @Override
-    public boolean isSingleton() {
-        return true;
-    }
-
-    @Override
-    public void setApplicationContext(ApplicationContext context) throws BeansException {
-        this.context = context;
-    }
-}
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/spring/FlowAnalysisRuleProviderFactoryBean.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/spring/FlowAnalysisRuleProviderFactoryBean.java
deleted file mode 100644
index afa69f18b2..0000000000
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/spring/FlowAnalysisRuleProviderFactoryBean.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * 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.nifi.web.spring;
-
-import org.apache.nifi.controller.FlowController;
-import org.apache.nifi.controller.flowanalysis.FlowAnalysisRuleProvider;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-
-public class FlowAnalysisRuleProviderFactoryBean implements FactoryBean<FlowAnalysisRuleProvider>, ApplicationContextAware {
-
-    private ApplicationContext context;
-    private FlowAnalysisRuleProvider flowAnalysisRuleProvider;
-
-    @Override
-    public FlowAnalysisRuleProvider getObject() throws Exception {
-        if (flowAnalysisRuleProvider == null) {
-            flowAnalysisRuleProvider = context.getBean("flowController", FlowController.class);
-        }
-
-        return flowAnalysisRuleProvider;
-    }
-
-    @Override
-    public Class<FlowAnalysisRuleProvider> getObjectType() {
-        return FlowAnalysisRuleProvider.class;
-    }
-
-    @Override
-    public boolean isSingleton() {
-        return true;
-    }
-
-    @Override
-    public void setApplicationContext(ApplicationContext context) throws BeansException {
-        this.context = context;
-    }
-}
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/spring/ReportingTaskProviderFactoryBean.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/spring/ReportingTaskProviderFactoryBean.java
deleted file mode 100644
index fcd0e07af2..0000000000
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/spring/ReportingTaskProviderFactoryBean.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.nifi.web.spring;
-
-import org.apache.nifi.controller.FlowController;
-import org.apache.nifi.controller.reporting.ReportingTaskProvider;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-
-/**
- *
- */
-public class ReportingTaskProviderFactoryBean implements FactoryBean<ReportingTaskProvider>, ApplicationContextAware {
-
-    private ApplicationContext context;
-    private ReportingTaskProvider reportingTaskProvider;
-
-    @Override
-    public ReportingTaskProvider getObject() throws Exception {
-        if (reportingTaskProvider == null) {
-            reportingTaskProvider = context.getBean("flowController", FlowController.class);
-        }
-
-        return reportingTaskProvider;
-    }
-
-    @Override
-    public Class<ReportingTaskProvider> getObjectType() {
-        return ReportingTaskProvider.class;
-    }
-
-    @Override
-    public boolean isSingleton() {
-        return true;
-    }
-
-    @Override
-    public void setApplicationContext(ApplicationContext context) throws BeansException {
-        this.context = context;
-    }
-}
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/ParameterContextNameCollisionResolver.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/ParameterContextNameCollisionResolver.java
index 6c7c362a2c..a66e4dad37 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/ParameterContextNameCollisionResolver.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/ParameterContextNameCollisionResolver.java
@@ -25,7 +25,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
-class ParameterContextNameCollisionResolver {
+public class ParameterContextNameCollisionResolver {
     private static final String PATTERN_GROUP_NAME = "name";
     private static final String PATTERN_GROUP_INDEX = "index";
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/ParameterContextReplacer.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/ParameterContextReplacer.java
index 56d1a6dd14..cb703885c5 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/ParameterContextReplacer.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/ParameterContextReplacer.java
@@ -46,7 +46,7 @@ public class ParameterContextReplacer {
 
     private final ParameterContextNameCollisionResolver nameCollisionResolver;
 
-    ParameterContextReplacer(final ParameterContextNameCollisionResolver nameCollisionResolver) {
+    public ParameterContextReplacer(final ParameterContextNameCollisionResolver nameCollisionResolver) {
         this.nameCollisionResolver = nameCollisionResolver;
     }
 
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/nifi-web-api-context.xml b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/nifi-web-api-context.xml
deleted file mode 100644
index 3e205612db..0000000000
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/resources/nifi-web-api-context.xml
+++ /dev/null
@@ -1,783 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  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.
--->
-<beans default-lazy-init="true"
-       xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:util="http://www.springframework.org/schema/util"
-       xmlns:aop="http://www.springframework.org/schema/aop"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
-    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
-
-    <!-- controller service / reporting task -->
-    <bean id="controllerServiceProvider" class="org.apache.nifi.web.spring.ControllerServiceProviderFactoryBean" depends-on="flowController" />
-    <bean id="reportingTaskProvider" class="org.apache.nifi.web.spring.ReportingTaskProviderFactoryBean" depends-on="flowController" />
-    <bean id="flowAnalysisRuleProvider" class="org.apache.nifi.web.spring.FlowAnalysisRuleProviderFactoryBean" depends-on="flowController" />
-
-    <!-- revision manager -->
-    <bean id="revisionManager" class="org.apache.nifi.web.revision.NaiveRevisionManager">
-    </bean>
-
-    <!-- content access -->
-    <bean id="contentAccess" class="org.apache.nifi.web.StandardNiFiContentAccess">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator" />
-        <property name="requestReplicator" ref="requestReplicator" />
-    </bean>
-
-    <!-- entity factory -->
-    <bean id="entityFactory" class="org.apache.nifi.web.api.dto.EntityFactory"></bean>
-
-    <!-- dto factory -->
-    <bean id="dtoFactory" class="org.apache.nifi.web.api.dto.DtoFactory">
-        <property name="controllerServiceProvider" ref="controllerServiceProvider" />
-        <property name="entityFactory" ref="entityFactory"/>
-        <property name="authorizer" ref="authorizer"/>
-        <property name="bulletinRepository" ref="bulletinRepository"/>
-        <property name="extensionManager" ref="extensionManager" />
-    </bean>
-
-    <!-- snippet utils -->
-    <bean id="snippetUtils" class="org.apache.nifi.web.util.SnippetUtils">
-        <property name="dtoFactory" ref="dtoFactory"/>
-        <property name="flowController" ref="flowController"/>
-        <property name="accessPolicyDAO" ref="policyBasedAuthorizerDAO"/>
-    </bean>
-
-    <bean id="clusterComponentLifecycle" class="org.apache.nifi.web.util.ClusterReplicationComponentLifecycle">
-        <property name="clusterCoordinator" ref="clusterCoordinator" />
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="serviceFacade" ref="serviceFacade" />
-        <property name="dtoFactory" ref="dtoFactory" />
-    </bean>
-
-    <bean id="localComponentLifecycle" class="org.apache.nifi.web.util.LocalComponentLifecycle">
-        <property name="serviceFacade" ref="serviceFacade" />
-        <property name="revisionManager" ref="revisionManager" />
-        <property name="dtoFactory" ref="dtoFactory" />
-    </bean>
-
-    <!-- search functionality -->
-    <bean id="searchQueryParser" class="org.apache.nifi.web.search.query.RegexSearchQueryParser" />
-    <bean id="resultEnricherFactory" class="org.apache.nifi.web.search.resultenrichment.ComponentSearchResultEnricherFactory">
-        <property name="authorizer" ref="authorizer" />
-    </bean>
-
-    <bean id="basicMatcher" class="org.apache.nifi.web.search.attributematchers.BasicMatcher" />
-    <bean id="extendedMatcher" class="org.apache.nifi.web.search.attributematchers.ExtendedMatcher" />
-    <bean id="schedulingMatcher" class="org.apache.nifi.web.search.attributematchers.SchedulingMatcher" />
-    <bean id="executionMatcher" class="org.apache.nifi.web.search.attributematchers.ExecutionMatcher" />
-    <bean id="scheduledStateMatcher" class="org.apache.nifi.web.search.attributematchers.ScheduledStateMatcher" />
-    <bean id="relationshipMatcher" class="org.apache.nifi.web.search.attributematchers.RelationshipMatcher" />
-    <bean id="connectionRelationshipMatcher" class="org.apache.nifi.web.search.attributematchers.ConnectionRelationshipMatcher" />
-    <bean id="processorMetadataMatcher" class="org.apache.nifi.web.search.attributematchers.ProcessorMetadataMatcher" />
-    <bean id="propertyMatcher" class="org.apache.nifi.web.search.attributematchers.PropertyMatcher" />
-    <bean id="searchableMatcher" class="org.apache.nifi.web.search.attributematchers.SearchableMatcher">
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="processGroupMatcher" class="org.apache.nifi.web.search.attributematchers.ProcessGroupMatcher" />
-    <bean id="connectionMatcher" class="org.apache.nifi.web.search.attributematchers.ConnectionMatcher" />
-    <bean id="prioritiesMatcher" class="org.apache.nifi.web.search.attributematchers.PrioritiesMatcher" />
-    <bean id="expirationMatcher" class="org.apache.nifi.web.search.attributematchers.ExpirationMatcher" />
-    <bean id="backPressureMatcher" class="org.apache.nifi.web.search.attributematchers.BackPressureMatcher" />
-    <bean id="connectivityMatcher" class="org.apache.nifi.web.search.attributematchers.ConnectivityMatcher" />
-    <bean id="remoteProcessGroupMatcher" class="org.apache.nifi.web.search.attributematchers.RemoteProcessGroupMatcher" />
-    <bean id="targetUriMatcher" class="org.apache.nifi.web.search.attributematchers.TargetUriMatcher" />
-    <bean id="transmissionStatusMatcher" class="org.apache.nifi.web.search.attributematchers.TransmissionStatusMatcher" />
-    <bean id="portScheduledStateMatcher" class="org.apache.nifi.web.search.attributematchers.PortScheduledStateMatcher" />
-    <bean id="parameterContextMatcher" class="org.apache.nifi.web.search.attributematchers.ParameterContextMatcher" />
-    <bean id="parameterMatcher" class="org.apache.nifi.web.search.attributematchers.ParameterMatcher" />
-    <bean id="labelMatcher" class="org.apache.nifi.web.search.attributematchers.LabelMatcher" />
-    <bean id="controllerServiceNodeMatcher" class="org.apache.nifi.web.search.attributematchers.ControllerServiceNodeMatcher" />
-    <bean id="parameterProviderNodeMatcher" class="org.apache.nifi.web.search.attributematchers.ParameterProviderNodeMatcher" />
-
-    <bean id="componentMatcherFactory" class="org.apache.nifi.web.search.ComponentMatcherFactory" />
-
-    <bean id="matcherForProcessor" factory-bean="componentMatcherFactory" factory-method="getInstanceForConnectable">
-        <constructor-arg>
-            <util:list>
-                <ref bean="extendedMatcher" />
-                <ref bean="schedulingMatcher" />
-                <ref bean="executionMatcher" />
-                <ref bean="scheduledStateMatcher" />
-                <ref bean="relationshipMatcher" />
-                <ref bean="processorMetadataMatcher" />
-                <ref bean="propertyMatcher" />
-                <ref bean="searchableMatcher" />
-            </util:list>
-        </constructor-arg>
-    </bean>
-
-    <bean id="matcherForProcessGroup" factory-bean="componentMatcherFactory" factory-method="getInstanceForProcessGroup">
-        <constructor-arg>
-            <util:list>
-                <ref bean="processGroupMatcher" />
-            </util:list>
-        </constructor-arg>
-    </bean>
-
-    <bean id="matcherForConnection" factory-bean="componentMatcherFactory" factory-method="getInstanceForConnection">
-        <constructor-arg>
-            <util:list>
-                <ref bean="connectionMatcher" />
-                <ref bean="connectionRelationshipMatcher" />
-                <ref bean="prioritiesMatcher" />
-                <ref bean="expirationMatcher" />
-                <ref bean="backPressureMatcher" />
-                <ref bean="connectivityMatcher" />
-            </util:list>
-        </constructor-arg>
-    </bean>
-
-    <bean id="matcherForRemoteProcessGroup" factory-bean="componentMatcherFactory" factory-method="getInstanceForRemoteProcessGroup">
-        <constructor-arg>
-            <util:list>
-                <ref bean="remoteProcessGroupMatcher" />
-                <ref bean="targetUriMatcher" />
-                <ref bean="transmissionStatusMatcher" />
-            </util:list>
-        </constructor-arg>
-    </bean>
-
-    <bean id="matcherForPort" factory-bean="componentMatcherFactory" factory-method="getInstanceForConnectable">
-        <constructor-arg>
-            <util:list>
-                <ref bean="extendedMatcher" />
-                <ref bean="portScheduledStateMatcher" />
-            </util:list>
-        </constructor-arg>
-    </bean>
-
-    <bean id="matcherForFunnel" factory-bean="componentMatcherFactory" factory-method="getInstanceForConnectable">
-        <constructor-arg>
-            <util:list>
-                <ref bean="basicMatcher" />
-            </util:list>
-        </constructor-arg>
-    </bean>
-
-    <bean id="matcherForParameterContext" factory-bean="componentMatcherFactory" factory-method="getInstanceForParameterContext">
-        <constructor-arg>
-            <util:list>
-                <ref bean="parameterContextMatcher" />
-            </util:list>
-        </constructor-arg>
-    </bean>
-
-    <bean id="matcherForParameter" factory-bean="componentMatcherFactory" factory-method="getInstanceForParameter">
-        <constructor-arg>
-            <util:list>
-                <ref bean="parameterMatcher" />
-            </util:list>
-        </constructor-arg>
-    </bean>
-
-    <bean id="matcherForLabel" factory-bean="componentMatcherFactory" factory-method="getInstanceForLabel">
-        <constructor-arg>
-            <util:list>
-                <ref bean="labelMatcher" />
-            </util:list>
-        </constructor-arg>
-    </bean>
-
-    <bean id="matcherForControllerServiceNode" factory-bean="componentMatcherFactory" factory-method="getInstanceForControllerServiceNode">
-        <constructor-arg>
-            <util:list>
-                <ref bean="controllerServiceNodeMatcher" />
-                <ref bean="propertyMatcher" />
-            </util:list>
-        </constructor-arg>
-    </bean>
-
-    <bean id="matcherForParameterProviderNode" factory-bean="componentMatcherFactory" factory-method="getInstanceForParameterProviderNode">
-        <constructor-arg>
-            <util:list>
-                <ref bean="parameterProviderNodeMatcher" />
-                <ref bean="propertyMatcher" />
-            </util:list>
-        </constructor-arg>
-    </bean>
-
-    <!-- nifi component dao initialization -->
-    <bean id="processGroupDAO" class="org.apache.nifi.web.dao.impl.StandardProcessGroupDAO">
-        <property name="flowController" ref="flowController"/>
-    </bean>
-    <bean id="remoteProcessGroupDAO" class="org.apache.nifi.web.dao.impl.StandardRemoteProcessGroupDAO">
-        <property name="flowController" ref="flowController"/>
-        <property name="componentStateDAO" ref="componentStateDAO"/>
-    </bean>
-    <bean id="labelDAO" class="org.apache.nifi.web.dao.impl.StandardLabelDAO">
-        <property name="flowController" ref="flowController"/>
-    </bean>
-    <bean id="funnelDAO" class="org.apache.nifi.web.dao.impl.StandardFunnelDAO">
-        <property name="flowController" ref="flowController"/>
-    </bean>
-    <bean id="inputPortDAO" class="org.apache.nifi.web.dao.impl.StandardInputPortDAO">
-        <property name="flowController" ref="flowController"/>
-    </bean>
-    <bean id="outputPortDAO" class="org.apache.nifi.web.dao.impl.StandardOutputPortDAO">
-        <property name="flowController" ref="flowController"/>
-    </bean>
-    <bean id="connectionDAO" class="org.apache.nifi.web.dao.impl.StandardConnectionDAO">
-        <property name="flowController" ref="flowController"/>
-        <property name="authorizer" ref="authorizer"/>
-    </bean>
-    <bean id="processorDAO" class="org.apache.nifi.web.dao.impl.StandardProcessorDAO">
-        <property name="flowController" ref="flowController"/>
-        <property name="componentStateDAO" ref="componentStateDAO"/>
-    </bean>
-    <bean id="controllerServiceDAO" class="org.apache.nifi.web.dao.impl.StandardControllerServiceDAO">
-        <property name="serviceProvider" ref="controllerServiceProvider"/>
-        <property name="componentStateDAO" ref="componentStateDAO"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="reloadComponent" class="org.apache.nifi.controller.StandardReloadComponent">
-        <constructor-arg index="0" ref="flowController" />
-    </bean>
-    <bean id="reportingTaskDAO" class="org.apache.nifi.web.dao.impl.StandardReportingTaskDAO">
-        <property name="reportingTaskProvider" ref="reportingTaskProvider"/>
-        <property name="componentStateDAO" ref="componentStateDAO"/>
-        <property name="reloadComponent" ref="reloadComponent" />
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="flowAnalysisRuleDAO" class="org.apache.nifi.web.dao.impl.StandardFlowAnalysisRuleDAO">
-        <property name="flowAnalysisRuleProvider" ref="flowAnalysisRuleProvider"/>
-        <property name="componentStateDAO" ref="componentStateDAO"/>
-        <property name="reloadComponent" ref="reloadComponent" />
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="parameterProviderDAO" class="org.apache.nifi.web.dao.impl.StandardParameterProviderDAO">
-        <property name="componentStateDAO" ref="componentStateDAO"/>
-        <property name="reloadComponent" ref="reloadComponent" />
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="componentStateDAO" class="org.apache.nifi.web.dao.impl.StandardComponentStateDAO">
-        <property name="stateManagerProvider" ref="stateManagerProvider"/>
-    </bean>
-    <bean id="snippetDAO" class="org.apache.nifi.web.dao.impl.StandardSnippetDAO">
-        <property name="flowController" ref="flowController"/>
-        <property name="snippetUtils" ref="snippetUtils"/>
-    </bean>
-    <bean id="flowRegistryDAO" class="org.apache.nifi.web.dao.impl.StandardFlowRegistryDAO">
-        <property name="flowController" ref="flowController"/>
-    </bean>
-    <bean id="policyBasedAuthorizerDAO" class="org.apache.nifi.web.dao.impl.StandardPolicyBasedAuthorizerDAO">
-        <constructor-arg ref="authorizer"/>
-    </bean>
-    <bean id="parameterContextDAO" class="org.apache.nifi.web.dao.impl.StandardParameterContextDAO">
-        <property name="flowController" ref="flowController" />
-        <property name="authorizer" ref="authorizer" />
-    </bean>
-    <bean id="controllerSearchService" class="org.apache.nifi.web.controller.ControllerSearchService">
-        <property name="flowController" ref="flowController" />
-        <property name="authorizer" ref="authorizer" />
-        <property name="resultEnricherFactory" ref="resultEnricherFactory" />
-
-        <property name="matcherForProcessor" ref="matcherForProcessor" />
-        <property name="matcherForProcessGroup" ref="matcherForProcessGroup" />
-        <property name="matcherForConnection" ref="matcherForConnection" />
-        <property name="matcherForRemoteProcessGroup" ref="matcherForRemoteProcessGroup" />
-        <property name="matcherForPort" ref="matcherForPort" />
-        <property name="matcherForFunnel" ref="matcherForFunnel" />
-        <property name="matcherForParameterContext" ref="matcherForParameterContext" />
-        <property name="matcherForParameter" ref="matcherForParameter" />
-        <property name="matcherForLabel" ref="matcherForLabel" />
-        <property name="matcherForControllerServiceNode" ref="matcherForControllerServiceNode" />
-        <property name="matcherForParameterProviderNode" ref="matcherForParameterProviderNode" />
-    </bean>
-    <bean id="controllerFacade" class="org.apache.nifi.web.controller.ControllerFacade">
-        <property name="flowController" ref="flowController"/>
-        <property name="flowService" ref="flowService"/>
-        <property name="authorizer" ref="authorizer"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="dtoFactory" ref="dtoFactory"/>
-        <property name="searchQueryParser" ref="searchQueryParser"/>
-        <property name="controllerSearchService" ref="controllerSearchService"/>
-        <property name="runtimeManifestService" ref="runtimeManifestService" />
-    </bean>
-    <bean id="authorizableLookup" class="org.apache.nifi.authorization.StandardAuthorizableLookup">
-        <property name="controllerFacade" ref="controllerFacade"/>
-        <property name="processorDAO" ref="processorDAO"/>
-        <property name="inputPortDAO" ref="inputPortDAO"/>
-        <property name="outputPortDAO" ref="outputPortDAO"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-        <property name="remoteProcessGroupDAO" ref="remoteProcessGroupDAO"/>
-        <property name="labelDAO" ref="labelDAO"/>
-        <property name="funnelDAO" ref="funnelDAO"/>
-        <property name="connectionDAO" ref="connectionDAO"/>
-        <property name="controllerServiceDAO" ref="controllerServiceDAO"/>
-        <property name="reportingTaskDAO" ref="reportingTaskDAO"/>
-        <property name="flowAnalysisRuleDAO" ref="flowAnalysisRuleDAO"/>
-        <property name="parameterProviderDAO" ref="parameterProviderDAO"/>
-        <property name="snippetDAO" ref="snippetDAO"/>
-        <property name="accessPolicyDAO" ref="policyBasedAuthorizerDAO"/>
-        <property name="parameterContextDAO" ref="parameterContextDAO" />
-    </bean>
-    <bean id="serviceFacade" class="org.apache.nifi.web.StandardNiFiServiceFacade">
-        <property name="authorizableLookup" ref="authorizableLookup" />
-        <property name="properties" ref="nifiProperties"/>
-        <property name="authorizer" ref="authorizer"/>
-        <property name="controllerFacade" ref="controllerFacade"/>
-        <property name="processorDAO" ref="processorDAO"/>
-        <property name="inputPortDAO" ref="inputPortDAO"/>
-        <property name="outputPortDAO" ref="outputPortDAO"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-        <property name="remoteProcessGroupDAO" ref="remoteProcessGroupDAO"/>
-        <property name="labelDAO" ref="labelDAO"/>
-        <property name="funnelDAO" ref="funnelDAO"/>
-        <property name="connectionDAO" ref="connectionDAO"/>
-        <property name="controllerServiceDAO" ref="controllerServiceDAO"/>
-        <property name="reportingTaskDAO" ref="reportingTaskDAO"/>
-        <property name="flowAnalysisRuleDAO" ref="flowAnalysisRuleDAO"/>
-        <property name="parameterProviderDAO" ref="parameterProviderDAO"/>
-        <property name="snippetDAO" ref="snippetDAO"/>
-        <property name="accessPolicyDAO" ref="policyBasedAuthorizerDAO"/>
-        <property name="userGroupDAO" ref="policyBasedAuthorizerDAO"/>
-        <property name="userDAO" ref="policyBasedAuthorizerDAO"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="snippetUtils" ref="snippetUtils"/>
-        <property name="revisionManager" ref="revisionManager" />
-        <property name="dtoFactory" ref="dtoFactory"/>
-        <property name="entityFactory" ref="entityFactory"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="heartbeatMonitor" ref="heartbeatMonitor" />
-        <property name="bulletinRepository" ref="bulletinRepository"/>
-        <property name="leaderElectionManager" ref="leaderElectionManager" />
-        <property name="flowRegistryDAO" ref="flowRegistryDAO" />
-        <property name="parameterContextDAO" ref="parameterContextDAO" />
-        <property name="ruleViolationsManager" ref="ruleViolationsManager" />
-        <property name="parallelProcessingService" ref="parallelProcessingService" />
-        <property name="narManager" ref="narManager" />
-    </bean>
-
-    <!-- component ui extension configuration context -->
-    <bean id="nifiWebConfigurationContext" class="org.apache.nifi.web.StandardNiFiWebConfigurationContext">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator" />
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="auditService" ref="auditService"/>
-        <property name="controllerServiceProvider" ref="controllerServiceProvider"/>
-        <property name="reportingTaskProvider" ref="reportingTaskProvider"/>
-        <property name="authorizer" ref="authorizer"/>
-    </bean>
-
-    <bean id="nameCollisionResolver" class="org.apache.nifi.web.util.ParameterContextNameCollisionResolver" />
-
-    <bean id="parameterContextReplacer" class="org.apache.nifi.web.util.ParameterContextReplacer">
-        <constructor-arg ref="nameCollisionResolver" />
-    </bean>
-
-    <!-- rest endpoints -->
-    <bean id="flowResource" class="org.apache.nifi.web.api.FlowResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="authorizer" ref="authorizer"/>
-        <property name="processorResource" ref="processorResource"/>
-        <property name="inputPortResource" ref="inputPortResource"/>
-        <property name="outputPortResource" ref="outputPortResource"/>
-        <property name="funnelResource" ref="funnelResource"/>
-        <property name="labelResource" ref="labelResource"/>
-        <property name="remoteProcessGroupResource" ref="remoteProcessGroupResource"/>
-        <property name="connectionResource" ref="connectionResource"/>
-        <property name="controllerServiceResource" ref="controllerServiceResource"/>
-        <property name="reportingTaskResource" ref="reportingTaskResource"/>
-        <property name="parameterProviderResource" ref="parameterProviderResource"/>
-        <property name="processGroupResource" ref="processGroupResource"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="resourceResource" class="org.apache.nifi.web.api.ResourceResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="controllerResource" class="org.apache.nifi.web.api.ControllerResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="reportingTaskResource" ref="reportingTaskResource"/>
-        <property name="parameterProviderResource" ref="parameterProviderResource"/>
-        <property name="controllerServiceResource" ref="controllerServiceResource"/>
-        <property name="authorizer" ref="authorizer"/>
-        <property name="uploadRequestReplicator" ref="uploadRequestReplicator" />
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="siteToSiteResource" class="org.apache.nifi.web.api.SiteToSiteResource" scope="singleton">
-        <constructor-arg ref="nifiProperties"/>
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="dataTransferResource" class="org.apache.nifi.web.api.DataTransferResource" scope="singleton">
-        <constructor-arg ref="nifiProperties"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="snippetResource" class="org.apache.nifi.web.api.SnippetResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="controllerServiceResource" class="org.apache.nifi.web.api.ControllerServiceResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="requestReplicator" ref="requestReplicator"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="reportingTaskResource" class="org.apache.nifi.web.api.ReportingTaskResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="parameterProviderResource" class="org.apache.nifi.web.api.ParameterProviderResource" scope="singleton"
-            init-method="init">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="dtoFactory" ref="dtoFactory" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-        <property name="clusterComponentLifecycle" ref="clusterComponentLifecycle" />
-        <property name="localComponentLifecycle" ref="localComponentLifecycle" />
-    </bean>
-    <bean id="processGroupResource" class="org.apache.nifi.web.api.ProcessGroupResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="processorResource" ref="processorResource"/>
-        <property name="inputPortResource" ref="inputPortResource"/>
-        <property name="outputPortResource" ref="outputPortResource"/>
-        <property name="funnelResource" ref="funnelResource"/>
-        <property name="labelResource" ref="labelResource"/>
-        <property name="remoteProcessGroupResource" ref="remoteProcessGroupResource"/>
-        <property name="connectionResource" ref="connectionResource"/>
-        <property name="controllerServiceResource" ref="controllerServiceResource"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-        <property name="clusterComponentLifecycle" ref="clusterComponentLifecycle" />
-        <property name="localComponentLifecycle" ref="localComponentLifecycle" />
-        <property name="dtoFactory" ref="dtoFactory" />
-        <property name="parameterContextReplacer" ref="parameterContextReplacer" />
-    </bean>
-    <bean id="versionsResource" class="org.apache.nifi.web.api.VersionsResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade" />
-        <property name="properties" ref="nifiProperties"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="flowController" ref="flowController" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="clusterComponentLifecycle" ref="clusterComponentLifecycle" />
-        <property name="localComponentLifecycle" ref="localComponentLifecycle" />
-        <property name="dtoFactory" ref="dtoFactory" />
-    </bean>
-    <bean id="processorResource" class="org.apache.nifi.web.api.ProcessorResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="connectionResource" class="org.apache.nifi.web.api.ConnectionResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="flowfileQueueResource" class="org.apache.nifi.web.api.FlowFileQueueResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="remoteProcessGroupResource" class="org.apache.nifi.web.api.RemoteProcessGroupResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="inputPortResource" class="org.apache.nifi.web.api.InputPortResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="outputPortResource" class="org.apache.nifi.web.api.OutputPortResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="labelResource" class="org.apache.nifi.web.api.LabelResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="funnelResource" class="org.apache.nifi.web.api.FunnelResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer" />
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="provenanceResource" class="org.apache.nifi.web.api.ProvenanceResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="provenanceEventResource" class="org.apache.nifi.web.api.ProvenanceEventResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="flowController" ref="flowController" />
-        <property name="authorizer" ref="authorizer" />
-    </bean>
-    <bean id="countersResource" class="org.apache.nifi.web.api.CountersResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="systemDiagnosticsResource" class="org.apache.nifi.web.api.SystemDiagnosticsResource" scope="singleton">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="authorizer" ref="authorizer"/>
-        <property name="flowController" ref="flowController" />
-        <property name="jmxMetricsService" ref="jmxMetricsService" />
-    </bean>
-    <bean id="accessResource" class="org.apache.nifi.web.api.AccessResource" scope="singleton">
-        <property name="logoutRequestManager" ref="logoutRequestManager" />
-        <property name="loginIdentityProvider" ref="loginIdentityProvider"/>
-        <property name="jwtLogoutListener" ref="jwtLogoutListener"/>
-        <property name="bearerTokenProvider" ref="bearerTokenProvider"/>
-        <property name="bearerTokenResolver" ref="bearerTokenResolver"/>
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="flowController" ref="flowController" />
-    </bean>
-    <bean id="accessPolicyResource" class="org.apache.nifi.web.api.AccessPolicyResource" scope="singleton">
-        <constructor-arg ref="serviceFacade"/>
-        <constructor-arg ref="authorizer"/>
-        <constructor-arg ref="nifiProperties"/>
-        <constructor-arg ref="clusterCoordinator"/>
-        <constructor-arg ref="requestReplicator" />
-        <constructor-arg ref="flowController" />
-    </bean>
-    <bean id="authenticationResource" class="org.apache.nifi.web.api.AuthenticationResource" scope="singleton">
-        <constructor-arg ref="authenticationConfiguration"/>
-        <constructor-arg ref="nifiProperties"/>
-        <constructor-arg ref="clusterCoordinator"/>
-        <constructor-arg ref="requestReplicator" />
-        <constructor-arg ref="flowController" />
-    </bean>
-    <bean id="tenantsResource" class="org.apache.nifi.web.api.TenantsResource" scope="singleton">
-        <constructor-arg ref="serviceFacade"/>
-        <constructor-arg ref="authorizer"/>
-        <constructor-arg ref="nifiProperties"/>
-        <constructor-arg ref="clusterCoordinator"/>
-        <constructor-arg ref="requestReplicator" />
-        <constructor-arg ref="flowController" />
-    </bean>
-    <bean id="parameterContextResource" class="org.apache.nifi.web.api.ParameterContextResource" scope="singleton"
-            init-method="init">
-        <property name="serviceFacade" ref="serviceFacade" />
-        <property name="authorizer" ref="authorizer" />
-        <property name="properties" ref="nifiProperties"/>
-        <property name="clusterCoordinator" ref="clusterCoordinator"/>
-        <property name="requestReplicator" ref="requestReplicator" />
-        <property name="flowController" ref="flowController" />
-        <property name="dtoFactory" ref="dtoFactory" />
-        <property name="clusterComponentLifecycle" ref="clusterComponentLifecycle" />
-        <property name="localComponentLifecycle" ref="localComponentLifecycle" />
-    </bean>
-    <bean id="jmxMetricsService" class="org.apache.nifi.web.api.metrics.jmx.StandardJmxMetricsService">
-        <property name="properties" ref="nifiProperties"/>
-        <property name="metricsCollector" ref="metricsCollector"/>
-    </bean>
-    <bean id="metricsResultConverter" class="org.apache.nifi.web.api.metrics.jmx.JmxMetricsResultConverter">
-    </bean>
-    <bean id="metricsCollector" class="org.apache.nifi.web.api.metrics.jmx.JmxMetricsCollector">
-        <constructor-arg ref="metricsResultConverter"/>
-    </bean>
-
-    <!-- enable aop -->
-    <!--
-        By setting '-target-class' to 'true' Spring will use CGLIB for
-        proxying instead of JDK dynamic proxy.  CGLIB uses class extension so
-        at runtime we can cast to the concrete class.  With JDK dynamic proxy,
-        we lose the ability to cast to the concrete class.
-    -->
-    <aop:aspectj-autoproxy proxy-target-class="true"/>
-
-    <!-- NiFi auditing -->
-    <bean id="controllerAuditor" class="org.apache.nifi.audit.ControllerAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="relationshipAuditor" class="org.apache.nifi.audit.RelationshipAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="processorAuditor" class="org.apache.nifi.audit.ProcessorAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="processGroupAuditor" class="org.apache.nifi.audit.ProcessGroupAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="portAuditor" class="org.apache.nifi.audit.PortAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="funnelAuditor" class="org.apache.nifi.audit.FunnelAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="remoteProcessGroupAuditor" class="org.apache.nifi.audit.RemoteProcessGroupAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="labelAuditor" class="org.apache.nifi.audit.LabelAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="snippetAuditor" class="org.apache.nifi.audit.SnippetAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-        <property name="inputPortDAO" ref="inputPortDAO"/>
-        <property name="outputPortDAO" ref="outputPortDAO"/>
-        <property name="remoteProcessGroupDAO" ref="remoteProcessGroupDAO"/>
-        <property name="processorDAO" ref="processorDAO"/>
-        <property name="funnelDAO" ref="funnelDAO"/>
-        <property name="connectionDAO" ref="connectionDAO"/>
-        <property name="labelDAO" ref="labelDAO"/>
-        <property name="portAuditor" ref="portAuditor"/>
-        <property name="funnelAuditor" ref="funnelAuditor"/>
-        <property name="remoteProcessGroupAuditor" ref="remoteProcessGroupAuditor"/>
-        <property name="processGroupAuditor" ref="processGroupAuditor"/>
-        <property name="processorAuditor" ref="processorAuditor"/>
-        <property name="relationshipAuditor" ref="relationshipAuditor"/>
-        <property name="labelAuditor" ref="labelAuditor"/>
-    </bean>
-    <bean id="controllerServiceAuditor" class="org.apache.nifi.audit.ControllerServiceAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="reportingTaskAuditor" class="org.apache.nifi.audit.ReportingTaskAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="flowAnalysisRuleAuditor" class="org.apache.nifi.audit.FlowAnalysisRuleAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="componentStateAuditor" class="org.apache.nifi.audit.ComponentStateAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="parameterContextAuditor" class="org.apache.nifi.audit.ParameterContextAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="parameterProviderAuditor" class="org.apache.nifi.audit.ParameterProviderAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="policyAuditor" class="org.apache.nifi.audit.AccessPolicyAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="userAuditor" class="org.apache.nifi.audit.UserAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-    <bean id="userGroupAuditor" class="org.apache.nifi.audit.UserGroupAuditor">
-        <property name="serviceFacade" ref="serviceFacade"/>
-        <property name="auditService" ref="auditService"/>
-        <property name="processGroupDAO" ref="processGroupDAO"/>
-    </bean>
-
-    <!-- NiFi locking -->
-    <bean id="serviceFacadeLock" class="org.apache.nifi.web.NiFiServiceFacadeLock"/>
-
-    <bean id="parallelProcessingService" class="org.apache.nifi.web.util.VirtualThreadParallelProcessingService">
-        <constructor-arg ref="nifiProperties" />
-    </bean>
-</beans>
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/audit/TestLabelAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/audit/TestLabelAuditor.java
index d0bc8a845e..fd8c7762dd 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/audit/TestLabelAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/audit/TestLabelAuditor.java
@@ -60,6 +60,8 @@ import static org.junit.jupiter.api.Assertions.assertInstanceOf;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoInteractions;
 import static org.mockito.Mockito.when;
@@ -78,13 +80,13 @@ public class TestLabelAuditor {
 
     private static final String UPDATED_LABEL = "updated-label";
 
-    @Mock
+    @Autowired
     AuditService auditService;
 
     @Mock
     Authentication authentication;
 
-    @Mock
+    @Autowired
     FlowController flowController;
 
     @Mock
@@ -104,6 +106,9 @@ public class TestLabelAuditor {
 
     @BeforeEach
     void setAuditor() {
+        reset(flowController);
+        reset(auditService);
+
         final SecurityContext securityContext = SecurityContextHolder.getContext();
         securityContext.setAuthentication(authentication);
         final NiFiUser user = new StandardNiFiUser.Builder().identity(USER_IDENTITY).build();
@@ -227,5 +232,15 @@ public class TestLabelAuditor {
         public ProcessGroupDAO processGroupDAO() {
             return new StandardProcessGroupDAO();
         }
+
+        @Bean
+        public AuditService auditService() {
+            return mock(AuditService.class);
+        }
+
+        @Bean
+        public FlowController flowController() {
+            return mock(FlowController.class);
+        }
     }
 }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/audit/TestProcessGroupAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/audit/TestProcessGroupAuditor.java
index 22fe1be009..ef4696d1e9 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/audit/TestProcessGroupAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/audit/TestProcessGroupAuditor.java
@@ -57,6 +57,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -75,9 +76,9 @@ public class TestProcessGroupAuditor {
     @Autowired
     private ProcessGroupAuditor processGroupAuditor;
 
-    @Mock
+    @Autowired
     private AuditService auditService;
-    @Mock
+    @Autowired
     private FlowController flowController;
     @Mock
     private Authentication authentication;
@@ -89,6 +90,9 @@ public class TestProcessGroupAuditor {
 
     @BeforeEach
     void setUp() {
+        reset(flowController);
+        reset(auditService);
+
         processGroupDAO.setFlowController(flowController);
         processGroupAuditor.setAuditService(auditService);
         processGroupAuditor.setProcessGroupDAO(processGroupDAO);
@@ -139,5 +143,16 @@ public class TestProcessGroupAuditor {
         public ProcessGroupAuditor processGroupAuditor() {
             return new ProcessGroupAuditor();
         }
+
+
+        @Bean
+        public AuditService auditService() {
+            return mock(AuditService.class);
+        }
+
+        @Bean
+        public FlowController flowController() {
+            return mock(FlowController.class);
+        }
     }
 }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/audit/TestProcessorAuditor.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/audit/TestProcessorAuditor.java
index 20cfb8702e..b5bb381e6c 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/audit/TestProcessorAuditor.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/audit/TestProcessorAuditor.java
@@ -41,7 +41,9 @@ import org.apache.nifi.processor.Processor;
 import org.apache.nifi.web.api.dto.BundleDTO;
 import org.apache.nifi.web.api.dto.ProcessorConfigDTO;
 import org.apache.nifi.web.api.dto.ProcessorDTO;
+import org.apache.nifi.web.dao.ComponentStateDAO;
 import org.apache.nifi.web.dao.ProcessGroupDAO;
+import org.apache.nifi.web.dao.impl.StandardComponentStateDAO;
 import org.apache.nifi.web.dao.impl.StandardProcessGroupDAO;
 import org.apache.nifi.web.dao.impl.StandardProcessorDAO;
 import org.junit.jupiter.api.BeforeEach;
@@ -73,6 +75,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoInteractions;
 import static org.mockito.Mockito.when;
@@ -94,7 +97,7 @@ class TestProcessorAuditor {
     @Autowired
     private ProcessorAuditor processorAuditor;
 
-    @Mock
+    @Autowired
     private AuditService auditService;
     @Mock
     private Authentication authentication;
@@ -104,7 +107,7 @@ class TestProcessorAuditor {
     private ExtensionManager extensionManager;
     @Mock
     private FlowController flowController;
-    @Mock
+    @Autowired
     private FlowManager flowManager;
     @Mock
     private ProcessGroup processGroup;
@@ -122,6 +125,9 @@ class TestProcessorAuditor {
 
     @BeforeEach
     void init() {
+        reset(flowController);
+        reset(auditService);
+
         SecurityContextHolder.getContext().setAuthentication(authentication);
         final NiFiUser user = new StandardNiFiUser.Builder().identity(USER_IDENTITY).build();
         userDetail = new NiFiUserDetails(user);
@@ -359,5 +365,30 @@ class TestProcessorAuditor {
         public ProcessGroupDAO processGroupDAO() {
             return new StandardProcessGroupDAO();
         }
+
+        @Bean
+        public ComponentStateDAO componentStateDAO() {
+            return new StandardComponentStateDAO();
+        }
+
+        @Bean
+        public StateManagerProvider stateManagerProvider() {
+            return mock(StateManagerProvider.class);
+        }
+
+        @Bean
+        public FlowManager flowManager() {
+            return mock(FlowManager.class);
+        }
+
+        @Bean
+        public AuditService auditService() {
+            return mock(AuditService.class);
+        }
+
+        @Bean
+        public FlowController flowController() {
+            return mock(FlowController.class);
+        }
     }
 }
diff --git a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/search/attributematchers/PropertyMatcherTest.java b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/search/attributematchers/PropertyMatcherTest.java
index 13984add61..b830284ab1 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/search/attributematchers/PropertyMatcherTest.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/search/attributematchers/PropertyMatcherTest.java
@@ -17,6 +17,7 @@
 package org.apache.nifi.web.search.attributematchers;
 
 import org.apache.nifi.components.PropertyDescriptor;
+import org.apache.nifi.controller.ComponentNode;
 import org.apache.nifi.controller.ProcessorNode;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
@@ -32,15 +33,12 @@ public class PropertyMatcherTest extends AbstractAttributeMatcherTest {
 
     @Test
     public void testMatchingAndNotFiltered() {
-        // given
-        final PropertyMatcher testSubject = new PropertyMatcher();
+        final PropertyMatcher<ComponentNode> testSubject = new PropertyMatcher<>();
         givenProperties(false);
         givenSearchTerm("lorem");
 
-        // when
         testSubject.match(component, searchQuery, matches);
 
-        // then
         thenMatchConsistsOf("Property name: loremName", //
                 "Property value: loremName - loremValue", //
                 "Property description: loremDescription");
@@ -48,45 +46,36 @@ public class PropertyMatcherTest extends AbstractAttributeMatcherTest {
 
     @Test
     public void testMatchingAndNotFilteredButSensitive() {
-        // given
-        final PropertyMatcher testSubject = new PropertyMatcher();
+        final PropertyMatcher<ComponentNode> testSubject = new PropertyMatcher<>();
         givenProperties(true);
         givenSearchTerm("lorem");
 
-        // when
         testSubject.match(component, searchQuery, matches);
 
-        // then
         thenMatchConsistsOf("Property name: loremName", //
                 "Property description: loremDescription");
     }
 
     @Test
     public void testMatchingAndFiltered() {
-        // given
-        final PropertyMatcher testSubject = new PropertyMatcher();
+        final PropertyMatcher<ComponentNode> testSubject = new PropertyMatcher<>();
         givenSearchTerm("lorem");
         givenFilter("properties", "exclude");
 
-        // when
         testSubject.match(component, searchQuery, matches);
 
-        // then
         thenNoMatches();
     }
 
     @Test
     public void testMatchingAndFilteredWithIncorrectValue() {
-        // given
-        final PropertyMatcher testSubject = new PropertyMatcher();
+        final PropertyMatcher<ComponentNode> testSubject = new PropertyMatcher<>();
         givenProperties(false);
         givenSearchTerm("lorem");
         givenFilter("properties", "foobar");
 
-        // when
         testSubject.match(component, searchQuery, matches);
 
-        // then
         thenMatchConsistsOf("Property name: loremName", //
                 "Property value: loremName - loremValue", //
                 "Property description: loremDescription");