You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/03/31 07:13:49 UTC

[camel] 03/06: CAMEL-15105: make the CamelBeanPostProcessor a plugin of the context

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

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

commit f95d2cb9d0c7e4aeeeb0e82aff15f8f607609c19
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Thu Mar 30 16:44:07 2023 +0200

    CAMEL-15105: make the CamelBeanPostProcessor a plugin of the context
---
 .../camel/spring/xml/CamelContextFactoryBean.java      |  4 ++--
 .../org/apache/camel/test/junit5/CamelTestSupport.java |  5 +++--
 .../camel/test/main/junit5/CamelMainContext.java       |  3 ++-
 .../java/org/apache/camel/ExtendedCamelContext.java    | 13 -------------
 .../apache/camel/impl/engine/AbstractCamelContext.java | 13 +++----------
 .../impl/engine/DefaultCamelContextExtension.java      | 18 ------------------
 .../DefaultDependencyInjectionAnnotationFactory.java   | 10 ++++++----
 .../org/apache/camel/impl/engine/DefaultInjector.java  |  3 ++-
 .../camel/impl/ExtendedCamelContextConfigurer.java     |  6 ------
 .../impl/lw/LightweightCamelContextExtension.java      | 11 -----------
 .../core/xml/AbstractCamelContextFactoryBean.java      |  3 ++-
 .../core/xml/AbstractCamelContextFactoryBeanTest.java  |  3 ++-
 .../camel/impl/BeanInjectProducerTemplateTest.java     |  3 ++-
 .../apache/camel/impl/BeanInjectRouteBuilderTest.java  |  3 ++-
 .../impl/BindToRegistryBeanPostProcessorTest.java      |  3 ++-
 .../camel/impl/CamelBeanPostProcessorInjectorTest.java |  3 ++-
 .../impl/CamelProduceInterfaceEventNotifierTest.java   |  3 ++-
 .../DefaultCamelBeanPostProcessorFieldFirstTest.java   |  3 ++-
 .../camel/impl/DefaultCamelBeanPostProcessorTest.java  |  3 ++-
 .../java/org/apache/camel/main/BaseMainSupport.java    |  7 ++++---
 .../camel/main/DefaultConfigurationConfigurer.java     |  3 ++-
 .../main/download/BasePackageScanDownloadListener.java |  3 ++-
 .../main/injection/AnnotationDependencyInjection.java  |  7 ++++---
 .../test/infra/core/AbstractCamelContextExtension.java |  5 +++--
 24 files changed, 51 insertions(+), 87 deletions(-)

diff --git a/components/camel-spring-xml/src/main/java/org/apache/camel/spring/xml/CamelContextFactoryBean.java b/components/camel-spring-xml/src/main/java/org/apache/camel/spring/xml/CamelContextFactoryBean.java
index 7a359740a51..33d2373355a 100644
--- a/components/camel-spring-xml/src/main/java/org/apache/camel/spring/xml/CamelContextFactoryBean.java
+++ b/components/camel-spring-xml/src/main/java/org/apache/camel/spring/xml/CamelContextFactoryBean.java
@@ -348,8 +348,8 @@ public class CamelContextFactoryBean extends AbstractCamelContextFactoryBean<Spr
             }
             // register the bean post processor on camel context
             if (beanPostProcessor instanceof org.apache.camel.spi.CamelBeanPostProcessor) {
-                context.getCamelContextExtension()
-                        .setBeanPostProcessor((org.apache.camel.spi.CamelBeanPostProcessor) beanPostProcessor);
+                context.getCamelContextExtension().addContextPlugin(org.apache.camel.spi.CamelBeanPostProcessor.class,
+                        (org.apache.camel.spi.CamelBeanPostProcessor) beanPostProcessor);
             }
         }
     }
diff --git a/components/camel-test/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java b/components/camel-test/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java
index d71ef6221e0..9d709d99ad7 100644
--- a/components/camel-test/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java
+++ b/components/camel-test/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java
@@ -58,6 +58,7 @@ import org.apache.camel.spi.PropertiesSource;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.support.BreakpointSupport;
 import org.apache.camel.support.EndpointHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.test.CamelRouteCoverageDumper;
 import org.apache.camel.util.StopWatch;
 import org.apache.camel.util.StringHelper;
@@ -690,9 +691,9 @@ public abstract class CamelTestSupport
         boolean spring = hasClassAnnotation("org.springframework.boot.test.context.SpringBootTest",
                 "org.springframework.context.annotation.ComponentScan");
         if (!spring) {
-            context.getCamelContextExtension().getBeanPostProcessor().postProcessBeforeInitialization(this,
+            PluginHelper.getBeanPostProcessor(context).postProcessBeforeInitialization(this,
                     getClass().getName());
-            context.getCamelContextExtension().getBeanPostProcessor().postProcessAfterInitialization(this,
+            PluginHelper.getBeanPostProcessor(context).postProcessAfterInitialization(this,
                     getClass().getName());
         }
     }
diff --git a/components/camel-test/camel-test-main-junit5/src/main/java/org/apache/camel/test/main/junit5/CamelMainContext.java b/components/camel-test/camel-test-main-junit5/src/main/java/org/apache/camel/test/main/junit5/CamelMainContext.java
index bc8c4d4f1df..35cc608d618 100644
--- a/components/camel-test/camel-test-main-junit5/src/main/java/org/apache/camel/test/main/junit5/CamelMainContext.java
+++ b/components/camel-test/camel-test-main-junit5/src/main/java/org/apache/camel/test/main/junit5/CamelMainContext.java
@@ -40,6 +40,7 @@ import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.support.BreakpointSupport;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.platform.commons.support.HierarchyTraversalMode;
 
@@ -148,7 +149,7 @@ final class CamelMainContext implements ExtensionContext.Store.CloseableResource
             configureShutdownTimeout(camelContext);
             configureDebuggerIfNeeded(camelContext);
             initCamelContext(camelContext);
-            final CamelBeanPostProcessor beanPostProcessor = extendedCamelContext.getBeanPostProcessor();
+            final CamelBeanPostProcessor beanPostProcessor = PluginHelper.getBeanPostProcessor(extendedCamelContext);
             for (Object instance : instances) {
                 initInstance(beanPostProcessor, instance);
                 replaceBeansInRegistry(camelContext.getRegistry(), instance);
diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
index faccf2112d4..a0f73453a80 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
@@ -30,7 +30,6 @@ import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.BeanProcessorFactory;
 import org.apache.camel.spi.BeanProxyFactory;
 import org.apache.camel.spi.BootstrapCloseable;
-import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.CamelDependencyInjectionAnnotationFactory;
 import org.apache.camel.spi.ComponentNameResolver;
 import org.apache.camel.spi.ComponentResolver;
@@ -270,18 +269,6 @@ public interface ExtendedCamelContext {
      */
     void setProcessorExchangeFactory(ProcessorExchangeFactory processorExchangeFactory);
 
-    /**
-     * Returns the bean post processor used to do any bean customization.
-     *
-     * @return the bean post processor.
-     */
-    CamelBeanPostProcessor getBeanPostProcessor();
-
-    /**
-     * Sets a custom bean post processor to use.
-     */
-    void setBeanPostProcessor(CamelBeanPostProcessor beanPostProcessor);
-
     /**
      * Returns the annotation dependency injection factory.
      */
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 4440b794930..1b61b6019f1 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -212,7 +212,6 @@ public abstract class AbstractCamelContext extends BaseService
     volatile ProcessorExchangeFactory processorExchangeFactory;
     volatile ReactiveExecutor reactiveExecutor;
     volatile Registry registry;
-    volatile CamelBeanPostProcessor beanPostProcessor;
     volatile CamelDependencyInjectionAnnotationFactory dependencyInjectionAnnotationFactory;
     volatile ComponentResolver componentResolver;
     volatile ComponentNameResolver componentNameResolver;
@@ -384,6 +383,8 @@ public abstract class AbstractCamelContext extends BaseService
 
         this.internalServiceManager = new InternalServiceManager(this, internalRouteStartupManager, startupListeners);
 
+        camelContextExtension.addContextPlugin(CamelBeanPostProcessor.class, createBeanPostProcessor());
+
         if (build) {
             try {
                 build();
@@ -2652,7 +2653,7 @@ public abstract class AbstractCamelContext extends BaseService
     }
 
     protected void doStartCamel() throws Exception {
-        if (!camelContextExtension.getBeanPostProcessor().isEnabled()) {
+        if (!camelContextExtension.getContextPlugin(CamelBeanPostProcessor.class).isEnabled()) {
             LOG.info("BeanPostProcessor is disabled. Dependency injection of Camel annotations in beans is not supported.");
         }
         if (LOG.isDebugEnabled()) {
@@ -4170,14 +4171,6 @@ public abstract class AbstractCamelContext extends BaseService
         camelContextExtension.setProcessorExchangeFactory(processorExchangeFactory);
     }
 
-    public CamelBeanPostProcessor getBeanPostProcessor() {
-        return camelContextExtension.getBeanPostProcessor();
-    }
-
-    public void setBeanPostProcessor(CamelBeanPostProcessor beanPostProcessor) {
-        camelContextExtension.setBeanPostProcessor(beanPostProcessor);
-    }
-
     public void setDataFormatResolver(DataFormatResolver dataFormatResolver) {
         camelContextExtension.setDataFormatResolver(dataFormatResolver);
     }
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
index de7e1b81270..957a688daf9 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelContextExtension.java
@@ -44,7 +44,6 @@ import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.BeanProcessorFactory;
 import org.apache.camel.spi.BeanProxyFactory;
 import org.apache.camel.spi.BootstrapCloseable;
-import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.CamelDependencyInjectionAnnotationFactory;
 import org.apache.camel.spi.ComponentNameResolver;
 import org.apache.camel.spi.ComponentResolver;
@@ -246,23 +245,6 @@ class DefaultCamelContextExtension implements ExtendedCamelContext {
         return text;
     }
 
-    @Override
-    public CamelBeanPostProcessor getBeanPostProcessor() {
-        if (camelContext.beanPostProcessor == null) {
-            synchronized (camelContext.lock) {
-                if (camelContext.beanPostProcessor == null) {
-                    setBeanPostProcessor(camelContext.createBeanPostProcessor());
-                }
-            }
-        }
-        return camelContext.beanPostProcessor;
-    }
-
-    @Override
-    public void setBeanPostProcessor(CamelBeanPostProcessor beanPostProcessor) {
-        camelContext.beanPostProcessor = camelContext.getInternalServiceManager().addService(beanPostProcessor);
-    }
-
     @Override
     public CamelDependencyInjectionAnnotationFactory getDependencyInjectionAnnotationFactory() {
         if (camelContext.dependencyInjectionAnnotationFactory == null) {
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultDependencyInjectionAnnotationFactory.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultDependencyInjectionAnnotationFactory.java
index 267bd2c7133..a2b6fced400 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultDependencyInjectionAnnotationFactory.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultDependencyInjectionAnnotationFactory.java
@@ -19,7 +19,9 @@ package org.apache.camel.impl.engine;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.CamelDependencyInjectionAnnotationFactory;
+import org.apache.camel.support.PluginHelper;
 
 /**
  * Default implementation of the {@link CamelDependencyInjectionAnnotationFactory}.
@@ -48,10 +50,10 @@ public class DefaultDependencyInjectionAnnotationFactory
         return () -> {
             if (beanPostProcess) {
                 try {
-                    camelContext.getCamelContextExtension().getBeanPostProcessor()
-                            .postProcessBeforeInitialization(bean, beanName);
-                    camelContext.getCamelContextExtension().getBeanPostProcessor()
-                            .postProcessAfterInitialization(bean, beanName);
+                    final CamelBeanPostProcessor beanPostProcessor = PluginHelper.getBeanPostProcessor(camelContext);
+
+                    beanPostProcessor.postProcessBeforeInitialization(bean, beanName);
+                    beanPostProcessor.postProcessAfterInitialization(bean, beanName);
                 } catch (Exception e) {
                     throw RuntimeCamelException.wrapRuntimeException(e);
                 }
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultInjector.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultInjector.java
index e7133a999dc..2b4b47cdf01 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultInjector.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultInjector.java
@@ -25,6 +25,7 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.Injector;
 import org.apache.camel.support.ObjectHelper;
+import org.apache.camel.support.PluginHelper;
 
 /**
  * A default implementation of {@link Injector} which just uses reflection to instantiate new objects using their zero
@@ -38,7 +39,7 @@ public class DefaultInjector implements Injector {
 
     public DefaultInjector(CamelContext context) {
         this.camelContext = context;
-        this.postProcessor = context.getCamelContextExtension().getBeanPostProcessor();
+        this.postProcessor = PluginHelper.getBeanPostProcessor(camelContext);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
index 699c2707cf3..b31d6e5e66e 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
@@ -29,8 +29,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "BasePackageScan": target.setBasePackageScan(property(camelContext, java.lang.String.class, value)); return true;
         case "beanintrospection":
         case "BeanIntrospection": target.setBeanIntrospection(property(camelContext, org.apache.camel.spi.BeanIntrospection.class, value)); return true;
-        case "beanpostprocessor":
-        case "BeanPostProcessor": target.setBeanPostProcessor(property(camelContext, org.apache.camel.spi.CamelBeanPostProcessor.class, value)); return true;
         case "bootstrapconfigurerresolver":
         case "BootstrapConfigurerResolver": target.setBootstrapConfigurerResolver(property(camelContext, org.apache.camel.spi.ConfigurerResolver.class, value)); return true;
         case "bootstrapfactoryfinder":
@@ -128,8 +126,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "BasePackageScan": return java.lang.String.class;
         case "beanintrospection":
         case "BeanIntrospection": return org.apache.camel.spi.BeanIntrospection.class;
-        case "beanpostprocessor":
-        case "BeanPostProcessor": return org.apache.camel.spi.CamelBeanPostProcessor.class;
         case "bootstrapconfigurerresolver":
         case "BootstrapConfigurerResolver": return org.apache.camel.spi.ConfigurerResolver.class;
         case "bootstrapfactoryfinder":
@@ -228,8 +224,6 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "BasePackageScan": return target.getBasePackageScan();
         case "beanintrospection":
         case "BeanIntrospection": return target.getBeanIntrospection();
-        case "beanpostprocessor":
-        case "BeanPostProcessor": return target.getBeanPostProcessor();
         case "bootstrapconfigurerresolver":
         case "BootstrapConfigurerResolver": return target.getBootstrapConfigurerResolver();
         case "bootstrapfactoryfinder":
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
index fa436742ee0..b6141635ab2 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContextExtension.java
@@ -45,7 +45,6 @@ import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.BeanProcessorFactory;
 import org.apache.camel.spi.BeanProxyFactory;
 import org.apache.camel.spi.BootstrapCloseable;
-import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.CamelDependencyInjectionAnnotationFactory;
 import org.apache.camel.spi.ComponentNameResolver;
 import org.apache.camel.spi.ComponentResolver;
@@ -290,16 +289,6 @@ class LightweightCamelContextExtension implements ExtendedCamelContext {
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public CamelBeanPostProcessor getBeanPostProcessor() {
-        return camelContext.getCamelContextExtension().getBeanPostProcessor();
-    }
-
-    @Override
-    public void setBeanPostProcessor(CamelBeanPostProcessor beanPostProcessor) {
-        throw new UnsupportedOperationException();
-    }
-
     @Override
     public CamelDependencyInjectionAnnotationFactory getDependencyInjectionAnnotationFactory() {
         return camelContext.getCamelContextExtension().getDependencyInjectionAnnotationFactory();
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index 4d2b6bf21ed..6fdcd4a98ff 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -142,6 +142,7 @@ import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.ObjectHelper;
 import org.apache.camel.support.OrderedComparator;
 import org.apache.camel.support.PatternHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.concurrent.ThreadPoolRejectedPolicy;
 import org.slf4j.Logger;
@@ -1156,7 +1157,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
             context.setStartupSummaryLevel(getStartupSummaryLevel());
         }
         if (getBeanPostProcessorEnabled() != null) {
-            CamelBeanPostProcessor cbpp = context.getCamelContextExtension().getBeanPostProcessor();
+            CamelBeanPostProcessor cbpp = PluginHelper.getBeanPostProcessor(context);
             if (cbpp != null) {
                 cbpp.setEnabled(CamelContextHelper.parseBoolean(context, getBeanPostProcessorEnabled()));
             }
diff --git a/core/camel-core-xml/src/test/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBeanTest.java b/core/camel-core-xml/src/test/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBeanTest.java
index 4d64a7fb048..84890b16ac5 100644
--- a/core/camel-core-xml/src/test/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBeanTest.java
+++ b/core/camel-core-xml/src/test/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBeanTest.java
@@ -136,7 +136,8 @@ public class AbstractCamelContextFactoryBeanTest {
         when(context.getManagementNameStrategy()).thenReturn(mock(ManagementNameStrategy.class));
         when(context.getExecutorServiceManager()).thenReturn(mock(ExecutorServiceManager.class));
         when(context.getInflightRepository()).thenReturn(mock(InflightRepository.class));
-        when(context.getCamelContextExtension().getBeanPostProcessor()).thenReturn(mock(CamelBeanPostProcessor.class));
+        when(context.getCamelContextExtension().getContextPlugin(CamelBeanPostProcessor.class))
+                .thenReturn(mock(CamelBeanPostProcessor.class));
 
         @SuppressWarnings("unchecked")
         final AbstractCamelContextFactoryBean<ModelCamelContext> factory = mock(AbstractCamelContextFactoryBean.class);
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/BeanInjectProducerTemplateTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/BeanInjectProducerTemplateTest.java
index b0eb84fd4b3..f160de14e0a 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/BeanInjectProducerTemplateTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/BeanInjectProducerTemplateTest.java
@@ -22,6 +22,7 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.FluentProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.spi.CamelBeanPostProcessor;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.Test;
 
 public class BeanInjectProducerTemplateTest extends ContextTestSupport {
@@ -35,7 +36,7 @@ public class BeanInjectProducerTemplateTest extends ContextTestSupport {
 
         // manual post process us as ContextTestSupport in camel-core doesn't do
         // that out of the box
-        CamelBeanPostProcessor post = context.getCamelContextExtension().getBeanPostProcessor();
+        CamelBeanPostProcessor post = PluginHelper.getBeanPostProcessor(context);
         post.postProcessBeforeInitialization(this, "BeanInjectProducerTemplateTest");
         post.postProcessAfterInitialization(this, "BeanInjectProducerTemplateTest");
         return context;
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/BeanInjectRouteBuilderTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/BeanInjectRouteBuilderTest.java
index 35180d4b296..971a97a1957 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/BeanInjectRouteBuilderTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/BeanInjectRouteBuilderTest.java
@@ -24,6 +24,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.Registry;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.Test;
 
 public class BeanInjectRouteBuilderTest extends ContextTestSupport {
@@ -44,7 +45,7 @@ public class BeanInjectRouteBuilderTest extends ContextTestSupport {
 
         // manual post process us as ContextTestSupport in camel-core doesn't do
         // that out of the box
-        CamelBeanPostProcessor post = context.getCamelContextExtension().getBeanPostProcessor();
+        CamelBeanPostProcessor post = PluginHelper.getBeanPostProcessor(context);
         post.postProcessBeforeInitialization(this, "MyRoute");
         post.postProcessAfterInitialization(this, "MyRoute");
         return context;
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/BindToRegistryBeanPostProcessorTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/BindToRegistryBeanPostProcessorTest.java
index 54a6f84e822..77ae4cafdaa 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/BindToRegistryBeanPostProcessorTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/BindToRegistryBeanPostProcessorTest.java
@@ -21,6 +21,7 @@ import org.apache.camel.BindToRegistry;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.spi.CamelBeanPostProcessor;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -41,7 +42,7 @@ public class BindToRegistryBeanPostProcessorTest extends ContextTestSupport {
     @Test
     public void testPostProcessor() throws Exception {
         // bean post processing dont run on ContextTestSupport
-        CamelBeanPostProcessor cbpp = context.getCamelContextExtension().getBeanPostProcessor();
+        CamelBeanPostProcessor cbpp = PluginHelper.getBeanPostProcessor(context);
         cbpp.postProcessBeforeInitialization(this, "this");
         cbpp.postProcessAfterInitialization(this, "this");
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/CamelBeanPostProcessorInjectorTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/CamelBeanPostProcessorInjectorTest.java
index 7be1629811a..349a54c98cc 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/CamelBeanPostProcessorInjectorTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/CamelBeanPostProcessorInjectorTest.java
@@ -26,6 +26,7 @@ import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.CamelBeanPostProcessorInjector;
 import org.apache.camel.spi.CamelLogger;
 import org.apache.camel.support.ObjectHelper;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.util.ReflectionHelper;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
@@ -40,7 +41,7 @@ public class CamelBeanPostProcessorInjectorTest extends ContextTestSupport {
     @BeforeEach
     public void setUp() throws Exception {
         super.setUp();
-        postProcessor = context.getCamelContextExtension().getBeanPostProcessor();
+        postProcessor = PluginHelper.getBeanPostProcessor(context);
         postProcessor.addCamelBeanPostProjectInjector(new MyInjector());
         helper = new CamelPostProcessorHelper(context);
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/CamelProduceInterfaceEventNotifierTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/CamelProduceInterfaceEventNotifierTest.java
index b72d42d0810..c3de76a5635 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/CamelProduceInterfaceEventNotifierTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/CamelProduceInterfaceEventNotifierTest.java
@@ -25,6 +25,7 @@ import org.apache.camel.Produce;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.support.EventNotifierSupport;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -81,7 +82,7 @@ public class CamelProduceInterfaceEventNotifierTest extends ContextTestSupport {
     @BeforeEach
     public void setUp() throws Exception {
         super.setUp();
-        postProcessor = context.getCamelContextExtension().getBeanPostProcessor();
+        postProcessor = PluginHelper.getBeanPostProcessor(context);
     }
 
     interface FooService {
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorFieldFirstTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorFieldFirstTest.java
index cd2e33a822c..8e7b5df9d44 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorFieldFirstTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorFieldFirstTest.java
@@ -22,6 +22,7 @@ import org.apache.camel.BindToRegistry;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.PropertyInject;
 import org.apache.camel.spi.CamelBeanPostProcessor;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -56,7 +57,7 @@ public class DefaultCamelBeanPostProcessorFieldFirstTest extends ContextTestSupp
     @BeforeEach
     public void setUp() throws Exception {
         super.setUp();
-        postProcessor = context.getCamelContextExtension().getBeanPostProcessor();
+        postProcessor = PluginHelper.getBeanPostProcessor(context);
     }
 
     @BindToRegistry
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorTest.java
index 3dd80b4d088..74e69fb79fa 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorTest.java
@@ -22,6 +22,7 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.spi.CamelBeanPostProcessor;
+import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
@@ -60,7 +61,7 @@ public class DefaultCamelBeanPostProcessorTest extends ContextTestSupport {
     @BeforeEach
     public void setUp() throws Exception {
         super.setUp();
-        postProcessor = context.getCamelContextExtension().getBeanPostProcessor();
+        postProcessor = PluginHelper.getBeanPostProcessor(context);
     }
 
     @BindToRegistry
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
index af36f96e99b..73257a02a59 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
@@ -63,6 +63,7 @@ import org.apache.camel.spi.StartupStepRecorder;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.DefaultContextReloadStrategy;
 import org.apache.camel.support.LifecycleStrategySupport;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.support.ResourceHelper;
 import org.apache.camel.support.SimpleEventNotifierSupport;
@@ -307,7 +308,7 @@ public abstract class BaseMainSupport extends BaseService {
 
         // lets use Camel's bean post processor on any existing configuration classes
         // so the instance has some support for dependency injection
-        CamelBeanPostProcessor postProcessor = camelContext.getCamelContextExtension().getBeanPostProcessor();
+        CamelBeanPostProcessor postProcessor = PluginHelper.getBeanPostProcessor(camelContext);
 
         // discover configurations from the registry
         Set<CamelConfiguration> registryConfigurations = camelContext.getRegistry().findByType(CamelConfiguration.class);
@@ -608,7 +609,7 @@ public abstract class BaseMainSupport extends BaseService {
             configurer.setRoutesCollector(routesCollector);
         }
 
-        configurer.setBeanPostProcessor(camelContext.getCamelContextExtension().getBeanPostProcessor());
+        configurer.setBeanPostProcessor(PluginHelper.getBeanPostProcessor(camelContext));
         configurer.setRoutesBuilders(mainConfigurationProperties.getRoutesBuilders());
         configurer.setRoutesBuilderClasses(mainConfigurationProperties.getRoutesBuilderClasses());
         if (mainConfigurationProperties.isBasePackageScanEnabled()) {
@@ -631,7 +632,7 @@ public abstract class BaseMainSupport extends BaseService {
             configurer.setRoutesCollector(routesCollector);
         }
 
-        configurer.setBeanPostProcessor(camelContext.getCamelContextExtension().getBeanPostProcessor());
+        configurer.setBeanPostProcessor(PluginHelper.getBeanPostProcessor(camelContext));
         configurer.setRoutesBuilders(mainConfigurationProperties.getRoutesBuilders());
         configurer.setRoutesBuilderClasses(mainConfigurationProperties.getRoutesBuilderClasses());
         if (mainConfigurationProperties.isBasePackageScanEnabled()) {
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
index 67e4bc57fff..3e33d41b02b 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
@@ -80,6 +80,7 @@ import org.apache.camel.support.ClassicUuidGenerator;
 import org.apache.camel.support.DefaultContextReloadStrategy;
 import org.apache.camel.support.DefaultUuidGenerator;
 import org.apache.camel.support.OffUuidGenerator;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.support.RouteWatcherReloadStrategy;
 import org.apache.camel.support.ShortUuidGenerator;
 import org.apache.camel.support.SimpleUuidGenerator;
@@ -135,7 +136,7 @@ public final class DefaultConfigurationConfigurer {
         ecc.getStartupStepRecorder().setRecordingProfile(config.getStartupRecorderProfile());
 
         ecc.setLightweight(config.isLightweight());
-        ecc.getBeanPostProcessor().setEnabled(config.isBeanPostProcessorEnabled());
+        PluginHelper.getBeanPostProcessor(ecc).setEnabled(config.isBeanPostProcessorEnabled());
         ecc.getBeanIntrospection().setExtendedStatistics(config.isBeanIntrospectionExtendedStatistics());
         if (config.getBeanIntrospectionLoggingLevel() != null) {
             ecc.getBeanIntrospection().setLoggingLevel(config.getBeanIntrospectionLoggingLevel());
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/BasePackageScanDownloadListener.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/BasePackageScanDownloadListener.java
index 4859389556d..2f5505e6860 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/BasePackageScanDownloadListener.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/BasePackageScanDownloadListener.java
@@ -29,6 +29,7 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.Configuration;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.PackageScanClassResolver;
+import org.apache.camel.support.PluginHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -89,7 +90,7 @@ public class BasePackageScanDownloadListener implements ArtifactDownloadListener
             }
         }
 
-        CamelBeanPostProcessor postProcessor = camelContext.getCamelContextExtension().getBeanPostProcessor();
+        CamelBeanPostProcessor postProcessor = PluginHelper.getBeanPostProcessor(camelContext);
         // prepare the directly configured instances
         for (Object configuration : configs) {
             postProcessor.postProcessBeforeInitialization(configuration, configuration.getClass().getName());
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/injection/AnnotationDependencyInjection.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/injection/AnnotationDependencyInjection.java
index 03c17071a18..9d799827994 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/injection/AnnotationDependencyInjection.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/injection/AnnotationDependencyInjection.java
@@ -40,6 +40,7 @@ import org.apache.camel.spi.CamelBeanPostProcessorInjector;
 import org.apache.camel.spi.CompilePostProcessor;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.ReflectionHelper;
 import org.eclipse.microprofile.config.inject.ConfigProperty;
@@ -60,7 +61,7 @@ public final class AnnotationDependencyInjection {
 
     public static void initAnnotationBasedDependencyInjection(CamelContext context) {
         Registry registry = context.getRegistry();
-        CamelBeanPostProcessor cbbp = context.getCamelContextExtension().getBeanPostProcessor();
+        CamelBeanPostProcessor cbbp = PluginHelper.getBeanPostProcessor(context);
 
         // camel / common
         registry.bind("CamelTypeConverterCompilePostProcessor", new TypeConverterCompilePostProcessor());
@@ -108,7 +109,7 @@ public final class AnnotationDependencyInjection {
             BindToRegistry bir = instance.getClass().getAnnotation(BindToRegistry.class);
             Configuration cfg = instance.getClass().getAnnotation(Configuration.class);
             if (bir != null || cfg != null || instance instanceof CamelConfiguration) {
-                CamelBeanPostProcessor bpp = camelContext.getCamelContextExtension().getBeanPostProcessor();
+                CamelBeanPostProcessor bpp = PluginHelper.getBeanPostProcessor(camelContext);
                 if (bir != null && ObjectHelper.isNotEmpty(bir.value())) {
                     name = bir.value();
                 } else if (cfg != null && ObjectHelper.isNotEmpty(cfg.value())) {
@@ -278,7 +279,7 @@ public final class AnnotationDependencyInjection {
     private static void bindBean(CamelContext context, String name, Object instance, boolean postProcess) {
         // to support hot reloading of beans then we need to enable unbind mode in bean post processor
         Registry registry = context.getRegistry();
-        CamelBeanPostProcessor bpp = context.getCamelContextExtension().getBeanPostProcessor();
+        CamelBeanPostProcessor bpp = PluginHelper.getBeanPostProcessor(context);
         bpp.setUnbindEnabled(true);
         try {
             // re-bind the bean to the registry
diff --git a/test-infra/camel-test-infra-core/src/test/java/org/apache/camel/test/infra/core/AbstractCamelContextExtension.java b/test-infra/camel-test-infra-core/src/test/java/org/apache/camel/test/infra/core/AbstractCamelContextExtension.java
index 3d73fa278fd..533406ff0d9 100644
--- a/test-infra/camel-test-infra-core/src/test/java/org/apache/camel/test/infra/core/AbstractCamelContextExtension.java
+++ b/test-infra/camel-test-infra-core/src/test/java/org/apache/camel/test/infra/core/AbstractCamelContextExtension.java
@@ -19,6 +19,7 @@ package org.apache.camel.test.infra.core;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.support.PluginHelper;
 import org.apache.camel.test.infra.core.annotations.ContextProvider;
 import org.junit.jupiter.api.extension.ExtensionContext;
 
@@ -39,9 +40,9 @@ abstract class AbstractCamelContextExtension implements CamelContextExtension {
     }
 
     protected void setupBeanPostProcessors(CamelContext context, Object testInstance) throws Exception {
-        context.getCamelContextExtension().getBeanPostProcessor().postProcessBeforeInitialization(testInstance,
+        PluginHelper.getBeanPostProcessor(context).postProcessBeforeInitialization(testInstance,
                 testInstance.getClass().getName());
-        context.getCamelContextExtension().getBeanPostProcessor().postProcessAfterInitialization(testInstance,
+        PluginHelper.getBeanPostProcessor(context).postProcessAfterInitialization(testInstance,
                 testInstance.getClass().getName());
     }
 }