http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/bean/springboot/BeanComponentConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/bean/springboot/BeanComponentConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/bean/springboot/BeanComponentConfiguration.java
index e037faf..4322c4a 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/bean/springboot/BeanComponentConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/bean/springboot/BeanComponentConfiguration.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.bean.springboot;
 
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -23,8 +25,11 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.bean")
-public class BeanComponentConfiguration {
+public class BeanComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * Whether the component should resolve property placeholders on itself 
when

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentAutoConfiguration.java
index 3a77bc3..cb3a1e9 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentAutoConfiguration.java
@@ -16,68 +16,114 @@
  */
 package org.apache.camel.component.beanclass.springboot;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.beanclass.ClassComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
+import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(ClassComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-public class ClassComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        ClassComponentConfiguration.class})
+public class ClassComponentAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(ClassComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<ClassComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private ClassComponentConfiguration componentConfiguration;
+
+    public ClassComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.class");
+        }
+    }
 
     @Lazy
     @Bean(name = "class-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(ClassComponent.class)
-    public ClassComponent configureClassComponent(CamelContext camelContext)
-            throws Exception {
+    public ClassComponent configureClassComponent() throws Exception {
         ClassComponent component = new ClassComponent();
         component.setCamelContext(camelContext);
-        return component;
-    }
-
-    
@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.class");
-            if (isEnabled(conditionContext, "camel.component.class.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    IntrospectionSupport.setProperties(camelContext,
+                            camelContext.getTypeConverter(), nestedProperty,
+                            nestedParameters);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
         }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext 
context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, 
defaultValue);
+        IntrospectionSupport.setProperties(camelContext,
+                camelContext.getTypeConverter(), component, parameters);
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<ClassComponent> configurer : customizers) 
{
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
+            }
         }
+        return component;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentConfiguration.java
index 3f8eaac..dbc1345 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentConfiguration.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.beanclass.springboot;
 
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -23,8 +25,11 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.class")
-public class ClassComponentConfiguration {
+public class ClassComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * Whether the component should resolve property placeholders on itself 
when

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/binding/springboot/BindingNameComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/binding/springboot/BindingNameComponentAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/binding/springboot/BindingNameComponentAutoConfiguration.java
index 9be6807..7b71671 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/binding/springboot/BindingNameComponentAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/binding/springboot/BindingNameComponentAutoConfiguration.java
@@ -16,68 +16,115 @@
  */
 package org.apache.camel.component.binding.springboot;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.binding.BindingNameComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
+import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(BindingNameComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-public class BindingNameComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        BindingNameComponentConfiguration.class})
+public class BindingNameComponentAutoConfiguration extends AllNestedConditions 
{
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(BindingNameComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<BindingNameComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private BindingNameComponentConfiguration componentConfiguration;
+
+    public BindingNameComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.binding");
+        }
+    }
 
     @Lazy
     @Bean(name = "binding-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(BindingNameComponent.class)
-    public BindingNameComponent configureBindingNameComponent(
-            CamelContext camelContext) throws Exception {
+    public BindingNameComponent configureBindingNameComponent()
+            throws Exception {
         BindingNameComponent component = new BindingNameComponent();
         component.setCamelContext(camelContext);
-        return component;
-    }
-
-    
@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.binding");
-            if (isEnabled(conditionContext, "camel.component.binding.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    IntrospectionSupport.setProperties(camelContext,
+                            camelContext.getTypeConverter(), nestedProperty,
+                            nestedParameters);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
         }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext 
context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, 
defaultValue);
+        IntrospectionSupport.setProperties(camelContext,
+                camelContext.getTypeConverter(), component, parameters);
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<BindingNameComponent> configurer : 
customizers) {
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
+            }
         }
+        return component;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/binding/springboot/BindingNameComponentConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/binding/springboot/BindingNameComponentConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/binding/springboot/BindingNameComponentConfiguration.java
index 3af7275..97c7bff 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/binding/springboot/BindingNameComponentConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/binding/springboot/BindingNameComponentConfiguration.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.binding.springboot;
 
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -24,8 +26,11 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.binding")
-public class BindingNameComponentConfiguration {
+public class BindingNameComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * Whether the component should resolve property placeholders on itself 
when

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/browse/springboot/BrowseComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/browse/springboot/BrowseComponentAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/browse/springboot/BrowseComponentAutoConfiguration.java
index 1cbe088..7dfed21 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/browse/springboot/BrowseComponentAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/browse/springboot/BrowseComponentAutoConfiguration.java
@@ -16,68 +16,114 @@
  */
 package org.apache.camel.component.browse.springboot;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.browse.BrowseComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
+import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(BrowseComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-public class BrowseComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        BrowseComponentConfiguration.class})
+public class BrowseComponentAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(BrowseComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<BrowseComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private BrowseComponentConfiguration componentConfiguration;
+
+    public BrowseComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.browse");
+        }
+    }
 
     @Lazy
     @Bean(name = "browse-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(BrowseComponent.class)
-    public BrowseComponent configureBrowseComponent(CamelContext camelContext)
-            throws Exception {
+    public BrowseComponent configureBrowseComponent() throws Exception {
         BrowseComponent component = new BrowseComponent();
         component.setCamelContext(camelContext);
-        return component;
-    }
-
-    
@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.browse");
-            if (isEnabled(conditionContext, "camel.component.browse.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    IntrospectionSupport.setProperties(camelContext,
+                            camelContext.getTypeConverter(), nestedProperty,
+                            nestedParameters);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
         }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext 
context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, 
defaultValue);
+        IntrospectionSupport.setProperties(camelContext,
+                camelContext.getTypeConverter(), component, parameters);
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<BrowseComponent> configurer : 
customizers) {
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
+            }
         }
+        return component;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/browse/springboot/BrowseComponentConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/browse/springboot/BrowseComponentConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/browse/springboot/BrowseComponentConfiguration.java
index 7a2ccbf..5f27870 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/browse/springboot/BrowseComponentConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/browse/springboot/BrowseComponentConfiguration.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.browse.springboot;
 
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -24,8 +26,11 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.browse")
-public class BrowseComponentConfiguration {
+public class BrowseComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * Whether the component should resolve property placeholders on itself 
when

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/controlbus/springboot/ControlBusComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/controlbus/springboot/ControlBusComponentAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/controlbus/springboot/ControlBusComponentAutoConfiguration.java
index 1b572b5..e93a8b2 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/controlbus/springboot/ControlBusComponentAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/controlbus/springboot/ControlBusComponentAutoConfiguration.java
@@ -16,68 +16,114 @@
  */
 package org.apache.camel.component.controlbus.springboot;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.controlbus.ControlBusComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
+import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(ControlBusComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-public class ControlBusComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        ControlBusComponentConfiguration.class})
+public class ControlBusComponentAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(ControlBusComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<ControlBusComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private ControlBusComponentConfiguration componentConfiguration;
+
+    public ControlBusComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.controlbus");
+        }
+    }
 
     @Lazy
     @Bean(name = "controlbus-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(ControlBusComponent.class)
-    public ControlBusComponent configureControlBusComponent(
-            CamelContext camelContext) throws Exception {
+    public ControlBusComponent configureControlBusComponent() throws Exception 
{
         ControlBusComponent component = new ControlBusComponent();
         component.setCamelContext(camelContext);
-        return component;
-    }
-
-    
@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.controlbus");
-            if (isEnabled(conditionContext, "camel.component.controlbus.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    IntrospectionSupport.setProperties(camelContext,
+                            camelContext.getTypeConverter(), nestedProperty,
+                            nestedParameters);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
         }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext 
context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, 
defaultValue);
+        IntrospectionSupport.setProperties(camelContext,
+                camelContext.getTypeConverter(), component, parameters);
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<ControlBusComponent> configurer : 
customizers) {
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
+            }
         }
+        return component;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/controlbus/springboot/ControlBusComponentConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/controlbus/springboot/ControlBusComponentConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/controlbus/springboot/ControlBusComponentConfiguration.java
index 7785337..c79dacf 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/controlbus/springboot/ControlBusComponentConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/controlbus/springboot/ControlBusComponentConfiguration.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.controlbus.springboot;
 
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -24,8 +26,11 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.controlbus")
-public class ControlBusComponentConfiguration {
+public class ControlBusComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * Whether the component should resolve property placeholders on itself 
when

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataformat/springboot/DataFormatComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataformat/springboot/DataFormatComponentAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataformat/springboot/DataFormatComponentAutoConfiguration.java
index 02091d5..2ea3ba5 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataformat/springboot/DataFormatComponentAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataformat/springboot/DataFormatComponentAutoConfiguration.java
@@ -16,68 +16,114 @@
  */
 package org.apache.camel.component.dataformat.springboot;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.dataformat.DataFormatComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
+import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(DataFormatComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-public class DataFormatComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        DataFormatComponentConfiguration.class})
+public class DataFormatComponentAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(DataFormatComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<DataFormatComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private DataFormatComponentConfiguration componentConfiguration;
+
+    public DataFormatComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.dataformat");
+        }
+    }
 
     @Lazy
     @Bean(name = "dataformat-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(DataFormatComponent.class)
-    public DataFormatComponent configureDataFormatComponent(
-            CamelContext camelContext) throws Exception {
+    public DataFormatComponent configureDataFormatComponent() throws Exception 
{
         DataFormatComponent component = new DataFormatComponent();
         component.setCamelContext(camelContext);
-        return component;
-    }
-
-    
@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.dataformat");
-            if (isEnabled(conditionContext, "camel.component.dataformat.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    IntrospectionSupport.setProperties(camelContext,
+                            camelContext.getTypeConverter(), nestedProperty,
+                            nestedParameters);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
         }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext 
context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, 
defaultValue);
+        IntrospectionSupport.setProperties(camelContext,
+                camelContext.getTypeConverter(), component, parameters);
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<DataFormatComponent> configurer : 
customizers) {
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
+            }
         }
+        return component;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataformat/springboot/DataFormatComponentConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataformat/springboot/DataFormatComponentConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataformat/springboot/DataFormatComponentConfiguration.java
index 9fa4663..fb466a2 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataformat/springboot/DataFormatComponentConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataformat/springboot/DataFormatComponentConfiguration.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.dataformat.springboot;
 
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -24,8 +26,11 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.dataformat")
-public class DataFormatComponentConfiguration {
+public class DataFormatComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * Whether the component should resolve property placeholders on itself 
when

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataset/springboot/DataSetComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataset/springboot/DataSetComponentAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataset/springboot/DataSetComponentAutoConfiguration.java
index 98405d6..6f6cf85 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataset/springboot/DataSetComponentAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataset/springboot/DataSetComponentAutoConfiguration.java
@@ -16,68 +16,114 @@
  */
 package org.apache.camel.component.dataset.springboot;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.dataset.DataSetComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
+import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(DataSetComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-public class DataSetComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        DataSetComponentConfiguration.class})
+public class DataSetComponentAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(DataSetComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<DataSetComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private DataSetComponentConfiguration componentConfiguration;
+
+    public DataSetComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.dataset");
+        }
+    }
 
     @Lazy
     @Bean(name = "dataset-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(DataSetComponent.class)
-    public DataSetComponent configureDataSetComponent(CamelContext 
camelContext)
-            throws Exception {
+    public DataSetComponent configureDataSetComponent() throws Exception {
         DataSetComponent component = new DataSetComponent();
         component.setCamelContext(camelContext);
-        return component;
-    }
-
-    
@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.dataset");
-            if (isEnabled(conditionContext, "camel.component.dataset.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    IntrospectionSupport.setProperties(camelContext,
+                            camelContext.getTypeConverter(), nestedProperty,
+                            nestedParameters);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
         }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext 
context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, 
defaultValue);
+        IntrospectionSupport.setProperties(camelContext,
+                camelContext.getTypeConverter(), component, parameters);
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<DataSetComponent> configurer : 
customizers) {
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
+            }
         }
+        return component;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataset/springboot/DataSetComponentConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataset/springboot/DataSetComponentConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataset/springboot/DataSetComponentConfiguration.java
index 5fe3fd2..ae537e9 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataset/springboot/DataSetComponentConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/dataset/springboot/DataSetComponentConfiguration.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.dataset.springboot;
 
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -24,8 +26,11 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  * 
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.dataset")
-public class DataSetComponentConfiguration {
+public class DataSetComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * Whether the component should resolve property placeholders on itself 
when

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/direct/springboot/DirectComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/direct/springboot/DirectComponentAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/direct/springboot/DirectComponentAutoConfiguration.java
index fd59a16..adc9807 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/direct/springboot/DirectComponentAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/direct/springboot/DirectComponentAutoConfiguration.java
@@ -17,49 +17,81 @@
 package org.apache.camel.component.direct.springboot;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.direct.DirectComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
 import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
 import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(DirectComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(DirectComponentConfiguration.class)
-public class DirectComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        DirectComponentConfiguration.class})
+public class DirectComponentAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(DirectComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<DirectComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private DirectComponentConfiguration componentConfiguration;
+
+    public DirectComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.direct");
+        }
+    }
 
     @Lazy
     @Bean(name = "direct-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(DirectComponent.class)
-    public DirectComponent configureDirectComponent(CamelContext camelContext,
-            DirectComponentConfiguration configuration) throws Exception {
+    public DirectComponent configureDirectComponent() throws Exception {
         DirectComponent component = new DirectComponent();
         component.setCamelContext(camelContext);
         Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
         for (Map.Entry<String, Object> entry : parameters.entrySet()) {
             Object value = entry.getValue();
             Class<?> paramClass = value.getClass();
@@ -82,32 +114,16 @@ public class DirectComponentAutoConfiguration {
         }
         IntrospectionSupport.setProperties(camelContext,
                 camelContext.getTypeConverter(), component, parameters);
-        return component;
-    }
-
-    
@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.direct");
-            if (isEnabled(conditionContext, "camel.component.direct.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<DirectComponent> configurer : 
customizers) {
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
-        }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext 
context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, 
defaultValue);
         }
+        return component;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/direct/springboot/DirectComponentConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/direct/springboot/DirectComponentConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/direct/springboot/DirectComponentConfiguration.java
index 4ba792c..37a4a43 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/direct/springboot/DirectComponentConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/direct/springboot/DirectComponentConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.direct.springboot;
 
 import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -27,7 +28,9 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.direct")
-public class DirectComponentConfiguration {
+public class DirectComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * If sending a message to a direct endpoint which has no active consumer

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/directvm/springboot/DirectVmComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/directvm/springboot/DirectVmComponentAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/directvm/springboot/DirectVmComponentAutoConfiguration.java
index bb636d1..4de4ab2 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/directvm/springboot/DirectVmComponentAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/directvm/springboot/DirectVmComponentAutoConfiguration.java
@@ -17,50 +17,81 @@
 package org.apache.camel.component.directvm.springboot;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.directvm.DirectVmComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
 import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
 import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(DirectVmComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(DirectVmComponentConfiguration.class)
-public class DirectVmComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        DirectVmComponentConfiguration.class})
+public class DirectVmComponentAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(DirectVmComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<DirectVmComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private DirectVmComponentConfiguration componentConfiguration;
+
+    public DirectVmComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.direct-vm");
+        }
+    }
 
     @Lazy
     @Bean(name = "direct-vm-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(DirectVmComponent.class)
-    public DirectVmComponent configureDirectVmComponent(
-            CamelContext camelContext,
-            DirectVmComponentConfiguration configuration) throws Exception {
+    public DirectVmComponent configureDirectVmComponent() throws Exception {
         DirectVmComponent component = new DirectVmComponent();
         component.setCamelContext(camelContext);
         Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
         for (Map.Entry<String, Object> entry : parameters.entrySet()) {
             Object value = entry.getValue();
             Class<?> paramClass = value.getClass();
@@ -83,32 +114,16 @@ public class DirectVmComponentAutoConfiguration {
         }
         IntrospectionSupport.setProperties(camelContext,
                 camelContext.getTypeConverter(), component, parameters);
-        return component;
-    }
-
-    
@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.direct-vm");
-            if (isEnabled(conditionContext, "camel.component.direct-vm.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<DirectVmComponent> configurer : 
customizers) {
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
-        }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext 
context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, 
defaultValue);
         }
+        return component;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/directvm/springboot/DirectVmComponentConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/directvm/springboot/DirectVmComponentConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/directvm/springboot/DirectVmComponentConfiguration.java
index ae30a25..f87ab23 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/directvm/springboot/DirectVmComponentConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/directvm/springboot/DirectVmComponentConfiguration.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.directvm.springboot;
 
 import javax.annotation.Generated;
 import org.apache.camel.spi.HeaderFilterStrategy;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.NestedConfigurationProperty;
 
@@ -29,7 +30,9 @@ import 
org.springframework.boot.context.properties.NestedConfigurationProperty;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.component.direct-vm")
-public class DirectVmComponentConfiguration {
+public class DirectVmComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
 
     /**
      * If sending a message to a direct endpoint which has no active consumer

http://git-wip-us.apache.org/repos/asf/camel/blob/3eeb97ac/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/file/springboot/FileComponentAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/file/springboot/FileComponentAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/file/springboot/FileComponentAutoConfiguration.java
index 4558d3b..36b8773 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/file/springboot/FileComponentAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/file/springboot/FileComponentAutoConfiguration.java
@@ -16,68 +16,114 @@
  */
 package org.apache.camel.component.file.springboot;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.file.FileComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfigureAfter;
-import org.springframework.boot.autoconfigure.condition.ConditionMessage;
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
+import org.springframework.boot.autoconfigure.condition.AllNestedConditions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 import 
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
+import 
org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.ConditionContext;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.core.type.AnnotatedTypeMetadata;
 
 /**
  * Generated by camel-package-maven-plugin - do not edit this file!
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @Configuration
-@ConditionalOnBean(type = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
 @Conditional(FileComponentAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-public class FileComponentAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        FileComponentConfiguration.class})
+public class FileComponentAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(FileComponentAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<FileComponent>> customizers;
+    @Autowired
+    private ComponentConfigurationProperties globalConfiguration;
+    @Autowired
+    private FileComponentConfiguration componentConfiguration;
+
+    public FileComponentAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.file");
+        }
+    }
 
     @Lazy
     @Bean(name = "file-component")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(FileComponent.class)
-    public FileComponent configureFileComponent(CamelContext camelContext)
-            throws Exception {
+    public FileComponent configureFileComponent() throws Exception {
         FileComponent component = new FileComponent();
         component.setCamelContext(camelContext);
-        return component;
-    }
-
-    
@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
-    public static class Condition extends SpringBootCondition {
-        @Override
-        public ConditionOutcome getMatchOutcome(
-                ConditionContext conditionContext,
-                AnnotatedTypeMetadata annotatedTypeMetadata) {
-            boolean groupEnabled = isEnabled(conditionContext,
-                    "camel.component.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.component.file");
-            if (isEnabled(conditionContext, "camel.component.file.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(componentConfiguration, parameters,
+                null, false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    IntrospectionSupport.setProperties(camelContext,
+                            camelContext.getTypeConverter(), nestedProperty,
+                            nestedParameters);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
             }
-            return ConditionOutcome.noMatch(message.because("not enabled"));
         }
-
-        private boolean isEnabled(
-                org.springframework.context.annotation.ConditionContext 
context,
-                java.lang.String prefix, boolean defaultValue) {
-            RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(
-                    context.getEnvironment(), prefix);
-            return resolver.getProperty("enabled", Boolean.class, 
defaultValue);
+        IntrospectionSupport.setProperties(camelContext,
+                camelContext.getTypeConverter(), component, parameters);
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && componentConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<FileComponent> configurer : customizers) {
+                LOGGER.debug("Configure component {}, with configurer {}",
+                        component, configurer);
+                configurer.customize(component);
+            }
         }
+        return component;
     }
 }
\ No newline at end of file

Reply via email to