diff --git a/components/camel-bean/src/main/java/org/apache/camel/component/bean/BeanComponent.java b/components/camel-bean/src/main/java/org/apache/camel/component/bean/BeanComponent.java
index 1c588e26e910d..e33981c0b57a9 100644
--- a/components/camel-bean/src/main/java/org/apache/camel/component/bean/BeanComponent.java
+++ b/components/camel-bean/src/main/java/org/apache/camel/component/bean/BeanComponent.java
@@ -81,7 +81,9 @@ BeanInfo getBeanInfoFromCache(BeanInfoCacheKey key) {
     }
 
     void addBeanInfoToCache(BeanInfoCacheKey key, BeanInfo beanInfo) {
-        beanInfoCache.put(key, beanInfo);
+        if (beanInfo != null) {
+            beanInfoCache.put(key, beanInfo);
+        }
     }
 
     @Override
diff --git a/components/camel-bean/src/main/java/org/apache/camel/component/bean/BeanInfo.java b/components/camel-bean/src/main/java/org/apache/camel/component/bean/BeanInfo.java
index f53439b6b751c..b5392d3763295 100644
--- a/components/camel-bean/src/main/java/org/apache/camel/component/bean/BeanInfo.java
+++ b/components/camel-bean/src/main/java/org/apache/camel/component/bean/BeanInfo.java
@@ -111,9 +111,13 @@ public BeanInfo(CamelContext camelContext, Class<?> type, Object instance, Metho
         this.component = beanComponent;
 
         final BeanInfoCacheKey key = new BeanInfoCacheKey(type, instance, explicitMethod);
+        final BeanInfoCacheKey key2 = instance != null ? new BeanInfoCacheKey(type, null, explicitMethod) : null;
 
         // lookup if we have a bean info cache
         BeanInfo beanInfo = component.getBeanInfoFromCache(key);
+        if (key2 != null && beanInfo == null) {
+            beanInfo = component.getBeanInfoFromCache(key2);
+        }
         if (beanInfo != null) {
             // copy the values from the cache we need
             defaultMethod = beanInfo.defaultMethod;
@@ -158,8 +162,16 @@ public BeanInfo(CamelContext camelContext, Class<?> type, Object instance, Metho
         operationsWithHandlerAnnotation = Collections.unmodifiableList(operationsWithHandlerAnnotation);
         methodMap = Collections.unmodifiableMap(methodMap);
 
-        // add new bean info to cache
-        component.addBeanInfoToCache(key, this);
+        // key must be instance based for custom/handler annotations
+        boolean instanceBased = !operationsWithCustomAnnotation.isEmpty() || !operationsWithHandlerAnnotation.isEmpty();
+        if (instanceBased) {
+            // add new bean info to cache (instance based)
+            component.addBeanInfoToCache(key, this);
+        } else {
+            // add new bean info to cache (not instance based, favour key2 if possible)
+            BeanInfoCacheKey k = key2 != null ? key2 : key;
+            component.addBeanInfoToCache(k, this);
+        }
     }
 
     public Class<?> getType() {
diff --git a/components/camel-bean/src/main/java/org/apache/camel/component/bean/DefaultBeanProcessorFactory.java b/components/camel-bean/src/main/java/org/apache/camel/component/bean/DefaultBeanProcessorFactory.java
index 9ff2ee574b643..7931d9a66d7e6 100644
--- a/components/camel-bean/src/main/java/org/apache/camel/component/bean/DefaultBeanProcessorFactory.java
+++ b/components/camel-bean/src/main/java/org/apache/camel/component/bean/DefaultBeanProcessorFactory.java
@@ -28,6 +28,7 @@
 import org.apache.camel.spi.BeanProcessorFactory;
 import org.apache.camel.spi.annotations.JdkService;
 import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
@@ -205,6 +206,8 @@ public Processor createBeanProcessor(
     @Override
     protected void doInit() throws Exception {
         parameterMappingStrategy = ParameterMappingStrategyHelper.createParameterMappingStrategy(getCamelContext());
+
         beanComponent = getCamelContext().getComponent("bean", BeanComponent.class);
+        ServiceHelper.initService(beanComponent);
     }
 }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/LRUCache.java b/core/camel-support/src/main/java/org/apache/camel/support/LRUCache.java
index bc474a98793ef..e4bd04f639561 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/LRUCache.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/LRUCache.java
@@ -18,18 +18,39 @@
 
 import java.util.Map;
 
+/**
+ * A least-recently-used cache.
+ */
 public interface LRUCache<K, V> extends Map<K, V> {
 
+    /**
+     * Clears the cache
+     */
     void cleanUp();
 
+    /**
+     * Reset usage statistics
+     */
     void resetStatistics();
 
+    /**
+     * Gets the number of evicted elements
+     */
     long getEvicted();
 
+    /**
+     * Gets the number of cache misses.
+     */
     long getMisses();
 
+    /**
+     * Gets the number of cache hits.
+     */
     long getHits();
 
+    /**
+     * Maximum cache capacity.
+     */
     int getMaxCacheSize();
 
 }