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;