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/impl/springboot/ZipDataFormatAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/impl/springboot/ZipDataFormatAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/impl/springboot/ZipDataFormatAutoConfiguration.java
index 653b189..ea64e86 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/impl/springboot/ZipDataFormatAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/impl/springboot/ZipDataFormatAutoConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.impl.springboot;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.CamelContext;
@@ -24,40 +25,71 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.impl.ZipDataFormat;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.DataFormatCustomizer;
 import org.apache.camel.spi.DataFormatFactory;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.DataFormatConfigurationProperties;
+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.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(ZipDataFormatAutoConfiguration.Condition.class)
 @AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(ZipDataFormatConfiguration.class)
-public class ZipDataFormatAutoConfiguration {
+@EnableConfigurationProperties({DataFormatConfigurationProperties.class,
+        ZipDataFormatConfiguration.class})
+public class ZipDataFormatAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(ZipDataFormatAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<DataFormatCustomizer<ZipDataFormat>> customizers;
+    @Autowired
+    private DataFormatConfigurationProperties globalConfiguration;
+    @Autowired
+    private ZipDataFormatConfiguration dataformatConfiguration;
+
+    public ZipDataFormatAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.dataformat", "camel.dataformat.zip");
+        }
+    }
 
     @Bean(name = "zip-dataformat-factory")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(ZipDataFormat.class)
-    public DataFormatFactory configureZipDataFormatFactory(
-            final CamelContext camelContext,
-            final ZipDataFormatConfiguration configuration) {
+    public DataFormatFactory configureZipDataFormatFactory() throws Exception {
         return new DataFormatFactory() {
             public DataFormat newInstance() {
                 ZipDataFormat dataformat = new ZipDataFormat();
@@ -71,7 +103,7 @@ public class ZipDataFormatAutoConfiguration {
                 }
                 try {
                     Map<String, Object> parameters = new HashMap<>();
-                    IntrospectionSupport.getProperties(configuration,
+                    IntrospectionSupport.getProperties(dataformatConfiguration,
                             parameters, null, false);
                     IntrospectionSupport.setProperties(camelContext,
                             camelContext.getTypeConverter(), dataformat,
@@ -79,34 +111,19 @@ public class ZipDataFormatAutoConfiguration {
                 } catch (Exception e) {
                     throw new RuntimeCamelException(e);
                 }
+                boolean useConfigurers = globalConfiguration.getConfigurer()
+                        .isEnabled()
+                        && dataformatConfiguration.getConfigurer().isEnabled();
+                if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+                    for (DataFormatCustomizer<ZipDataFormat> configurer : 
customizers) {
+                        LOGGER.debug(
+                                "Configure dataformat {}, with configurer {}",
+                                dataformat, configurer);
+                        configurer.customize(dataformat);
+                    }
+                }
                 return dataformat;
             }
         };
     }
-
-    
@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.dataformat.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.dataformat.zip");
-            if (isEnabled(conditionContext, "camel.dataformat.zip.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
-            }
-            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);
-        }
-    }
 }
\ 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/impl/springboot/ZipDataFormatConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/impl/springboot/ZipDataFormatConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/impl/springboot/ZipDataFormatConfiguration.java
index 6a3a6ba..5cdd799 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/impl/springboot/ZipDataFormatConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/impl/springboot/ZipDataFormatConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.impl.springboot;
 
 import javax.annotation.Generated;
+import org.apache.camel.spring.boot.DataFormatConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -26,7 +27,9 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.dataformat.zip")
-public class ZipDataFormatConfiguration {
+public class ZipDataFormatConfiguration
+        extends
+            DataFormatConfigurationPropertiesCommon {
 
     /**
      * To specify a specific compression between 0-9. -1 is default compression

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/language/bean/springboot/BeanLanguageAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageAutoConfiguration.java
index 810bd2d..2c9a3e9 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageAutoConfiguration.java
@@ -17,45 +17,78 @@
 package org.apache.camel.language.bean.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.CamelContextAware;
 import org.apache.camel.language.bean.BeanLanguage;
+import org.apache.camel.spi.LanguageCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.LanguageConfigurationProperties;
+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.Scope;
-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(BeanLanguageAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(BeanLanguageConfiguration.class)
-public class BeanLanguageAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({LanguageConfigurationProperties.class,
+        BeanLanguageConfiguration.class})
+public class BeanLanguageAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(BeanLanguageAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<LanguageCustomizer<BeanLanguage>> customizers;
+    @Autowired
+    private LanguageConfigurationProperties globalConfiguration;
+    @Autowired
+    private BeanLanguageConfiguration languageConfiguration;
+
+    public BeanLanguageAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.bean");
+        }
+    }
 
     @Bean(name = "bean-language")
     @Scope("prototype")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(BeanLanguage.class)
-    public BeanLanguage configureBeanLanguage(CamelContext camelContext,
-            BeanLanguageConfiguration configuration) throws Exception {
+    public BeanLanguage configureBeanLanguage() throws Exception {
         BeanLanguage language = new BeanLanguage();
         if (CamelContextAware.class.isAssignableFrom(BeanLanguage.class)) {
             CamelContextAware contextAware = CamelContextAware.class
@@ -65,36 +98,20 @@ public class BeanLanguageAutoConfiguration {
             }
         }
         Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
+        IntrospectionSupport.getProperties(languageConfiguration, parameters,
+                null, false);
         IntrospectionSupport.setProperties(camelContext,
                 camelContext.getTypeConverter(), language, parameters);
-        return language;
-    }
-
-    
@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.language.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.language.bean");
-            if (isEnabled(conditionContext, "camel.language.bean.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && languageConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (LanguageCustomizer<BeanLanguage> configurer : customizers) {
+                LOGGER.debug("Configure language {}, with configurer {}",
+                        language, configurer);
+                configurer.customize(language);
             }
-            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 language;
     }
 }
\ 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/language/bean/springboot/BeanLanguageConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageConfiguration.java
index aa65384..7955560 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.bean.springboot;
 
 import javax.annotation.Generated;
+import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -26,7 +27,9 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.language.bean")
-public class BeanLanguageConfiguration {
+public class BeanLanguageConfiguration
+        extends
+            LanguageConfigurationPropertiesCommon {
 
     /**
      * Whether to trim the value to remove leading and trailing whitespaces and

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/language/constant/springboot/ConstantLanguageAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageAutoConfiguration.java
index a5a00d4..ecf1c57 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageAutoConfiguration.java
@@ -17,46 +17,78 @@
 package org.apache.camel.language.constant.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.CamelContextAware;
 import org.apache.camel.language.constant.ConstantLanguage;
+import org.apache.camel.spi.LanguageCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.LanguageConfigurationProperties;
+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.Scope;
-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(ConstantLanguageAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(ConstantLanguageConfiguration.class)
-public class ConstantLanguageAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({LanguageConfigurationProperties.class,
+        ConstantLanguageConfiguration.class})
+public class ConstantLanguageAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(ConstantLanguageAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<LanguageCustomizer<ConstantLanguage>> customizers;
+    @Autowired
+    private LanguageConfigurationProperties globalConfiguration;
+    @Autowired
+    private ConstantLanguageConfiguration languageConfiguration;
+
+    public ConstantLanguageAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.constant");
+        }
+    }
 
     @Bean(name = "constant-language")
     @Scope("prototype")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(ConstantLanguage.class)
-    public ConstantLanguage configureConstantLanguage(
-            CamelContext camelContext,
-            ConstantLanguageConfiguration configuration) throws Exception {
+    public ConstantLanguage configureConstantLanguage() throws Exception {
         ConstantLanguage language = new ConstantLanguage();
         if (CamelContextAware.class.isAssignableFrom(ConstantLanguage.class)) {
             CamelContextAware contextAware = CamelContextAware.class
@@ -66,36 +98,20 @@ public class ConstantLanguageAutoConfiguration {
             }
         }
         Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
+        IntrospectionSupport.getProperties(languageConfiguration, parameters,
+                null, false);
         IntrospectionSupport.setProperties(camelContext,
                 camelContext.getTypeConverter(), language, parameters);
-        return language;
-    }
-
-    
@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.language.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.language.constant");
-            if (isEnabled(conditionContext, "camel.language.constant.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && languageConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (LanguageCustomizer<ConstantLanguage> configurer : 
customizers) {
+                LOGGER.debug("Configure language {}, with configurer {}",
+                        language, configurer);
+                configurer.customize(language);
             }
-            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 language;
     }
 }
\ 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/language/constant/springboot/ConstantLanguageConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageConfiguration.java
index 7d0ad77..f4e0c69 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/constant/springboot/ConstantLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.constant.springboot;
 
 import javax.annotation.Generated;
+import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -26,7 +27,9 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.language.constant")
-public class ConstantLanguageConfiguration {
+public class ConstantLanguageConfiguration
+        extends
+            LanguageConfigurationPropertiesCommon {
 
     /**
      * Whether to trim the value to remove leading and trailing whitespaces and

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/language/header/springboot/HeaderLanguageAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageAutoConfiguration.java
index 0d75034..449245d 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageAutoConfiguration.java
@@ -17,45 +17,78 @@
 package org.apache.camel.language.header.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.CamelContextAware;
 import org.apache.camel.language.header.HeaderLanguage;
+import org.apache.camel.spi.LanguageCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.LanguageConfigurationProperties;
+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.Scope;
-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(HeaderLanguageAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(HeaderLanguageConfiguration.class)
-public class HeaderLanguageAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({LanguageConfigurationProperties.class,
+        HeaderLanguageConfiguration.class})
+public class HeaderLanguageAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(HeaderLanguageAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<LanguageCustomizer<HeaderLanguage>> customizers;
+    @Autowired
+    private LanguageConfigurationProperties globalConfiguration;
+    @Autowired
+    private HeaderLanguageConfiguration languageConfiguration;
+
+    public HeaderLanguageAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.header");
+        }
+    }
 
     @Bean(name = "header-language")
     @Scope("prototype")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(HeaderLanguage.class)
-    public HeaderLanguage configureHeaderLanguage(CamelContext camelContext,
-            HeaderLanguageConfiguration configuration) throws Exception {
+    public HeaderLanguage configureHeaderLanguage() throws Exception {
         HeaderLanguage language = new HeaderLanguage();
         if (CamelContextAware.class.isAssignableFrom(HeaderLanguage.class)) {
             CamelContextAware contextAware = CamelContextAware.class
@@ -65,36 +98,20 @@ public class HeaderLanguageAutoConfiguration {
             }
         }
         Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
+        IntrospectionSupport.getProperties(languageConfiguration, parameters,
+                null, false);
         IntrospectionSupport.setProperties(camelContext,
                 camelContext.getTypeConverter(), language, parameters);
-        return language;
-    }
-
-    
@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.language.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.language.header");
-            if (isEnabled(conditionContext, "camel.language.header.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && languageConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (LanguageCustomizer<HeaderLanguage> configurer : customizers) {
+                LOGGER.debug("Configure language {}, with configurer {}",
+                        language, configurer);
+                configurer.customize(language);
             }
-            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 language;
     }
 }
\ 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/language/header/springboot/HeaderLanguageConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageConfiguration.java
index 6a3d67a..478c8c8 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/header/springboot/HeaderLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.header.springboot;
 
 import javax.annotation.Generated;
+import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -26,7 +27,9 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.language.header")
-public class HeaderLanguageConfiguration {
+public class HeaderLanguageConfiguration
+        extends
+            LanguageConfigurationPropertiesCommon {
 
     /**
      * Whether to trim the value to remove leading and trailing whitespaces and

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/language/property/springboot/ExchangePropertyLanguageAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageAutoConfiguration.java
index 15e1508..c164c3e 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageAutoConfiguration.java
@@ -17,46 +17,80 @@
 package org.apache.camel.language.property.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.CamelContextAware;
 import org.apache.camel.language.property.ExchangePropertyLanguage;
+import org.apache.camel.spi.LanguageCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.LanguageConfigurationProperties;
+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.Scope;
-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(ExchangePropertyLanguageAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(ExchangePropertyLanguageConfiguration.class)
-public class ExchangePropertyLanguageAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({LanguageConfigurationProperties.class,
+        ExchangePropertyLanguageConfiguration.class})
+public class ExchangePropertyLanguageAutoConfiguration
+        extends
+            AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(ExchangePropertyLanguageAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<LanguageCustomizer<ExchangePropertyLanguage>> customizers;
+    @Autowired
+    private LanguageConfigurationProperties globalConfiguration;
+    @Autowired
+    private ExchangePropertyLanguageConfiguration languageConfiguration;
+
+    public ExchangePropertyLanguageAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.exchangeproperty");
+        }
+    }
 
     @Bean(name = "exchangeProperty-language")
     @Scope("prototype")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(ExchangePropertyLanguage.class)
-    public ExchangePropertyLanguage configureExchangePropertyLanguage(
-            CamelContext camelContext,
-            ExchangePropertyLanguageConfiguration configuration)
+    public ExchangePropertyLanguage configureExchangePropertyLanguage()
             throws Exception {
         ExchangePropertyLanguage language = new ExchangePropertyLanguage();
         if (CamelContextAware.class
@@ -68,36 +102,20 @@ public class ExchangePropertyLanguageAutoConfiguration {
             }
         }
         Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
+        IntrospectionSupport.getProperties(languageConfiguration, parameters,
+                null, false);
         IntrospectionSupport.setProperties(camelContext,
                 camelContext.getTypeConverter(), language, parameters);
-        return language;
-    }
-
-    
@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.language.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.language.exchangeproperty");
-            if (isEnabled(conditionContext, "camel.language.exchangeproperty.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && languageConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (LanguageCustomizer<ExchangePropertyLanguage> configurer : 
customizers) {
+                LOGGER.debug("Configure language {}, with configurer {}",
+                        language, configurer);
+                configurer.customize(language);
             }
-            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 language;
     }
 }
\ 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/language/property/springboot/ExchangePropertyLanguageConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageConfiguration.java
index 8e58600..8e1272a 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/property/springboot/ExchangePropertyLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.property.springboot;
 
 import javax.annotation.Generated;
+import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -26,7 +27,9 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.language.exchangeproperty")
-public class ExchangePropertyLanguageConfiguration {
+public class ExchangePropertyLanguageConfiguration
+        extends
+            LanguageConfigurationPropertiesCommon {
 
     /**
      * Whether to trim the value to remove leading and trailing whitespaces and

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/language/ref/springboot/RefLanguageAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageAutoConfiguration.java
index f73dffe..e4982c6 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageAutoConfiguration.java
@@ -17,45 +17,78 @@
 package org.apache.camel.language.ref.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.CamelContextAware;
 import org.apache.camel.language.ref.RefLanguage;
+import org.apache.camel.spi.LanguageCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.LanguageConfigurationProperties;
+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.Scope;
-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(RefLanguageAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(RefLanguageConfiguration.class)
-public class RefLanguageAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({LanguageConfigurationProperties.class,
+        RefLanguageConfiguration.class})
+public class RefLanguageAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(RefLanguageAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<LanguageCustomizer<RefLanguage>> customizers;
+    @Autowired
+    private LanguageConfigurationProperties globalConfiguration;
+    @Autowired
+    private RefLanguageConfiguration languageConfiguration;
+
+    public RefLanguageAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.ref");
+        }
+    }
 
     @Bean(name = "ref-language")
     @Scope("prototype")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(RefLanguage.class)
-    public RefLanguage configureRefLanguage(CamelContext camelContext,
-            RefLanguageConfiguration configuration) throws Exception {
+    public RefLanguage configureRefLanguage() throws Exception {
         RefLanguage language = new RefLanguage();
         if (CamelContextAware.class.isAssignableFrom(RefLanguage.class)) {
             CamelContextAware contextAware = CamelContextAware.class
@@ -65,35 +98,20 @@ public class RefLanguageAutoConfiguration {
             }
         }
         Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
+        IntrospectionSupport.getProperties(languageConfiguration, parameters,
+                null, false);
         IntrospectionSupport.setProperties(camelContext,
                 camelContext.getTypeConverter(), language, parameters);
-        return language;
-    }
-
-    
@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.language.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.language.ref");
-            if (isEnabled(conditionContext, "camel.language.ref.", 
groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && languageConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (LanguageCustomizer<RefLanguage> configurer : customizers) {
+                LOGGER.debug("Configure language {}, with configurer {}",
+                        language, configurer);
+                configurer.customize(language);
             }
-            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 language;
     }
 }
\ 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/language/ref/springboot/RefLanguageConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageConfiguration.java
index f1fbc7e..fcce637 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/ref/springboot/RefLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.ref.springboot;
 
 import javax.annotation.Generated;
+import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -26,7 +27,9 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.language.ref")
-public class RefLanguageConfiguration {
+public class RefLanguageConfiguration
+        extends
+            LanguageConfigurationPropertiesCommon {
 
     /**
      * Whether to trim the value to remove leading and trailing whitespaces and

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/language/simple/springboot/FileLanguageAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageAutoConfiguration.java
index 1345dc8..0e300e2 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageAutoConfiguration.java
@@ -17,45 +17,78 @@
 package org.apache.camel.language.simple.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.CamelContextAware;
 import org.apache.camel.language.simple.FileLanguage;
+import org.apache.camel.spi.LanguageCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.LanguageConfigurationProperties;
+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.Scope;
-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(FileLanguageAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(FileLanguageConfiguration.class)
-public class FileLanguageAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({LanguageConfigurationProperties.class,
+        FileLanguageConfiguration.class})
+public class FileLanguageAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(FileLanguageAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<LanguageCustomizer<FileLanguage>> customizers;
+    @Autowired
+    private LanguageConfigurationProperties globalConfiguration;
+    @Autowired
+    private FileLanguageConfiguration languageConfiguration;
+
+    public FileLanguageAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.file");
+        }
+    }
 
     @Bean(name = "file-language")
     @Scope("prototype")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(FileLanguage.class)
-    public FileLanguage configureFileLanguage(CamelContext camelContext,
-            FileLanguageConfiguration configuration) throws Exception {
+    public FileLanguage configureFileLanguage() throws Exception {
         FileLanguage language = new FileLanguage();
         if (CamelContextAware.class.isAssignableFrom(FileLanguage.class)) {
             CamelContextAware contextAware = CamelContextAware.class
@@ -65,36 +98,20 @@ public class FileLanguageAutoConfiguration {
             }
         }
         Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
+        IntrospectionSupport.getProperties(languageConfiguration, parameters,
+                null, false);
         IntrospectionSupport.setProperties(camelContext,
                 camelContext.getTypeConverter(), language, parameters);
-        return language;
-    }
-
-    
@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.language.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.language.file");
-            if (isEnabled(conditionContext, "camel.language.file.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && languageConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (LanguageCustomizer<FileLanguage> configurer : customizers) {
+                LOGGER.debug("Configure language {}, with configurer {}",
+                        language, configurer);
+                configurer.customize(language);
             }
-            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 language;
     }
 }
\ 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/language/simple/springboot/FileLanguageConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageConfiguration.java
index 13f0756..7f36892 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/FileLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.simple.springboot;
 
 import javax.annotation.Generated;
+import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -26,7 +27,9 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.language.file")
-public class FileLanguageConfiguration {
+public class FileLanguageConfiguration
+        extends
+            LanguageConfigurationPropertiesCommon {
 
     /**
      * Whether to trim the value to remove leading and trailing whitespaces and

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/language/simple/springboot/SimpleLanguageAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageAutoConfiguration.java
index dadfb85..b209726 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageAutoConfiguration.java
@@ -17,45 +17,78 @@
 package org.apache.camel.language.simple.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.CamelContextAware;
 import org.apache.camel.language.simple.SimpleLanguage;
+import org.apache.camel.spi.LanguageCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.LanguageConfigurationProperties;
+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.Scope;
-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(SimpleLanguageAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(SimpleLanguageConfiguration.class)
-public class SimpleLanguageAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({LanguageConfigurationProperties.class,
+        SimpleLanguageConfiguration.class})
+public class SimpleLanguageAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(SimpleLanguageAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<LanguageCustomizer<SimpleLanguage>> customizers;
+    @Autowired
+    private LanguageConfigurationProperties globalConfiguration;
+    @Autowired
+    private SimpleLanguageConfiguration languageConfiguration;
+
+    public SimpleLanguageAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.simple");
+        }
+    }
 
     @Bean(name = "simple-language")
     @Scope("prototype")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(SimpleLanguage.class)
-    public SimpleLanguage configureSimpleLanguage(CamelContext camelContext,
-            SimpleLanguageConfiguration configuration) throws Exception {
+    public SimpleLanguage configureSimpleLanguage() throws Exception {
         SimpleLanguage language = new SimpleLanguage();
         if (CamelContextAware.class.isAssignableFrom(SimpleLanguage.class)) {
             CamelContextAware contextAware = CamelContextAware.class
@@ -65,36 +98,20 @@ public class SimpleLanguageAutoConfiguration {
             }
         }
         Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
+        IntrospectionSupport.getProperties(languageConfiguration, parameters,
+                null, false);
         IntrospectionSupport.setProperties(camelContext,
                 camelContext.getTypeConverter(), language, parameters);
-        return language;
-    }
-
-    
@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.language.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.language.simple");
-            if (isEnabled(conditionContext, "camel.language.simple.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && languageConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (LanguageCustomizer<SimpleLanguage> configurer : customizers) {
+                LOGGER.debug("Configure language {}, with configurer {}",
+                        language, configurer);
+                configurer.customize(language);
             }
-            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 language;
     }
 }
\ 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/language/simple/springboot/SimpleLanguageConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageConfiguration.java
index f987583..3375a03 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/simple/springboot/SimpleLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.simple.springboot;
 
 import javax.annotation.Generated;
+import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -26,7 +27,9 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.language.simple")
-public class SimpleLanguageConfiguration {
+public class SimpleLanguageConfiguration
+        extends
+            LanguageConfigurationPropertiesCommon {
 
     /**
      * Whether to trim the value to remove leading and trailing whitespaces and

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/language/tokenizer/springboot/TokenizeLanguageAutoConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageAutoConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageAutoConfiguration.java
index 41c56f6..64d1b55 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageAutoConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageAutoConfiguration.java
@@ -17,46 +17,78 @@
 package org.apache.camel.language.tokenizer.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.CamelContextAware;
 import org.apache.camel.language.tokenizer.TokenizeLanguage;
+import org.apache.camel.spi.LanguageCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.LanguageConfigurationProperties;
+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.Scope;
-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(TokenizeLanguageAutoConfiguration.Condition.class)
-@AutoConfigureAfter(name = 
"org.apache.camel.spring.boot.CamelAutoConfiguration")
-@EnableConfigurationProperties(TokenizeLanguageConfiguration.class)
-public class TokenizeLanguageAutoConfiguration {
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({LanguageConfigurationProperties.class,
+        TokenizeLanguageConfiguration.class})
+public class TokenizeLanguageAutoConfiguration extends AllNestedConditions {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(TokenizeLanguageAutoConfiguration.class);
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired(required = false)
+    private List<LanguageCustomizer<TokenizeLanguage>> customizers;
+    @Autowired
+    private LanguageConfigurationProperties globalConfiguration;
+    @Autowired
+    private TokenizeLanguageConfiguration languageConfiguration;
+
+    public TokenizeLanguageAutoConfiguration() {
+        super(ConfigurationPhase.REGISTER_BEAN);
+    }
+
+    @ConditionalOnBean(CamelContext.class)
+    public static class OnCamelContext {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class OnCamelAutoConfiguration {
+    }
+
+    @ConditionalOnBean(CamelAutoConfiguration.class)
+    public static class Condition extends GroupCondition {
+        public Condition() {
+            super("camel.component", "camel.component.tokenize");
+        }
+    }
 
     @Bean(name = "tokenize-language")
     @Scope("prototype")
     @ConditionalOnClass(CamelContext.class)
     @ConditionalOnMissingBean(TokenizeLanguage.class)
-    public TokenizeLanguage configureTokenizeLanguage(
-            CamelContext camelContext,
-            TokenizeLanguageConfiguration configuration) throws Exception {
+    public TokenizeLanguage configureTokenizeLanguage() throws Exception {
         TokenizeLanguage language = new TokenizeLanguage();
         if (CamelContextAware.class.isAssignableFrom(TokenizeLanguage.class)) {
             CamelContextAware contextAware = CamelContextAware.class
@@ -66,36 +98,20 @@ public class TokenizeLanguageAutoConfiguration {
             }
         }
         Map<String, Object> parameters = new HashMap<>();
-        IntrospectionSupport.getProperties(configuration, parameters, null,
-                false);
+        IntrospectionSupport.getProperties(languageConfiguration, parameters,
+                null, false);
         IntrospectionSupport.setProperties(camelContext,
                 camelContext.getTypeConverter(), language, parameters);
-        return language;
-    }
-
-    
@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.language.", true);
-            ConditionMessage.Builder message = ConditionMessage
-                    .forCondition("camel.language.tokenize");
-            if (isEnabled(conditionContext, "camel.language.tokenize.",
-                    groupEnabled)) {
-                return ConditionOutcome.match(message.because("enabled"));
+        boolean useConfigurers = globalConfiguration.getConfigurer()
+                .isEnabled()
+                && languageConfiguration.getConfigurer().isEnabled();
+        if (useConfigurers && ObjectHelper.isNotEmpty(customizers)) {
+            for (LanguageCustomizer<TokenizeLanguage> configurer : 
customizers) {
+                LOGGER.debug("Configure language {}, with configurer {}",
+                        language, configurer);
+                configurer.customize(language);
             }
-            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 language;
     }
 }
\ 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/language/tokenizer/springboot/TokenizeLanguageConfiguration.java
----------------------------------------------------------------------
diff --git 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageConfiguration.java
 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageConfiguration.java
index e74795d..f1a77d0 100644
--- 
a/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageConfiguration.java
+++ 
b/platforms/spring-boot/components-starter/camel-core-starter/src/main/java/org/apache/camel/language/tokenizer/springboot/TokenizeLanguageConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.camel.language.tokenizer.springboot;
 
 import javax.annotation.Generated;
+import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 
 /**
@@ -26,7 +27,9 @@ import 
org.springframework.boot.context.properties.ConfigurationProperties;
  */
 @Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
 @ConfigurationProperties(prefix = "camel.language.tokenize")
-public class TokenizeLanguageConfiguration {
+public class TokenizeLanguageConfiguration
+        extends
+            LanguageConfigurationPropertiesCommon {
 
     /**
      * Whether to trim the value to remove leading and trailing whitespaces and

Reply via email to