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

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


The following commit(s) were added to refs/heads/main by this push:
     new 8e2239e2d73 CAMEL-20213: camel-core dependency injection should inject 
fields with @BeanInject more eager. (#12381)
8e2239e2d73 is described below

commit 8e2239e2d730df87f75bd9f05c8a09607d3512c3
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Sun Dec 10 19:06:43 2023 +0100

    CAMEL-20213: camel-core dependency injection should inject fields with 
@BeanInject more eager. (#12381)
---
 .../impl/engine/DefaultCamelBeanPostProcessor.java | 40 ++++++++++++++++------
 ...amelBeanPostProcessorComplexFieldFirstTest.java | 16 ++++-----
 2 files changed, 37 insertions(+), 19 deletions(-)

diff --git 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelBeanPostProcessor.java
 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelBeanPostProcessor.java
index 69406c74a12..80f17804e92 100644
--- 
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelBeanPostProcessor.java
+++ 
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultCamelBeanPostProcessor.java
@@ -221,6 +221,9 @@ public class DefaultCamelBeanPostProcessor implements 
CamelBeanPostProcessor, Ca
             injectBindToRegistryFields(bean, beanName, filter);
             injectBindToRegistryMethods(bean, beanName, filter);
         }
+
+        // camel endpoint specific fields last
+        injectEndpointFields(bean, beanName, filter);
     }
 
     protected void injectSecondPass(Object bean, String beanName, 
Function<Class<?>, Boolean> filter) {
@@ -233,8 +236,33 @@ public class DefaultCamelBeanPostProcessor implements 
CamelBeanPostProcessor, Ca
             injectBindToRegistryFields(bean, beanName, filter);
             injectBindToRegistryMethods(bean, beanName, filter);
         }
-
         injectMethods(bean, beanName, filter);
+
+        // camel endpoint specific fields last
+        injectEndpointFields(bean, beanName, filter);
+    }
+
+    protected void injectEndpointFields(final Object bean, final String 
beanName, Function<Class<?>, Boolean> accept) {
+        ReflectionHelper.doWithFields(bean.getClass(), field -> {
+            if (accept != null && !accept.apply(field.getType())) {
+                return;
+            }
+
+            EndpointInject endpointInject = 
field.getAnnotation(EndpointInject.class);
+            if (endpointInject != null) {
+                injectField(field, endpointInject.value(), 
endpointInject.property(), bean, beanName);
+            }
+
+            Produce produce = field.getAnnotation(Produce.class);
+            if (produce != null) {
+                injectField(field, produce.value(), produce.property(), bean, 
beanName, produce.binding());
+            }
+
+            // custom bean injector on the field
+            for (CamelBeanPostProcessorInjector injector : 
beanPostProcessorInjectors) {
+                injector.onFieldInject(field, bean, beanName);
+            }
+        });
     }
 
     protected void injectFields(final Object bean, final String beanName, 
Function<Class<?>, Boolean> accept) {
@@ -258,16 +286,6 @@ public class DefaultCamelBeanPostProcessor implements 
CamelBeanPostProcessor, Ca
                 injectFieldBeanConfig(field, beanConfigInject.value(), bean, 
beanName);
             }
 
-            EndpointInject endpointInject = 
field.getAnnotation(EndpointInject.class);
-            if (endpointInject != null) {
-                injectField(field, endpointInject.value(), 
endpointInject.property(), bean, beanName);
-            }
-
-            Produce produce = field.getAnnotation(Produce.class);
-            if (produce != null) {
-                injectField(field, produce.value(), produce.property(), bean, 
beanName, produce.binding());
-            }
-
             // custom bean injector on the field
             for (CamelBeanPostProcessorInjector injector : 
beanPostProcessorInjectors) {
                 injector.onFieldInject(field, bean, beanName);
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorComplexFieldFirstTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorComplexFieldFirstTest.java
index c886d5aaed1..4ce860ca253 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorComplexFieldFirstTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelBeanPostProcessorComplexFieldFirstTest.java
@@ -16,6 +16,14 @@
  */
 package org.apache.camel.impl;
 
+import java.io.PrintWriter;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
+import java.util.logging.Logger;
+
+import javax.sql.DataSource;
+
 import org.apache.camel.BeanInject;
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.ContextTestSupport;
@@ -24,14 +32,6 @@ import org.apache.camel.support.PluginHelper;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import javax.sql.DataSource;
-
-import java.io.PrintWriter;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.sql.SQLFeatureNotSupportedException;
-import java.util.logging.Logger;
-
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 

Reply via email to