Skip to content

Commit dbfab9b

Browse files
committed
chore: adopt @autoConfiguration in components-starter and generator
Follow-up to the core module migration in #1751. Updates the code generator and all hand-written auto-configuration classes in components-starter to use Spring Boot's @autoConfiguration annotation. Generator (SpringBootAutoConfigurationMojo): - Emit @autoConfiguration(after=...) instead of @configuration + @AutoConfigureAfter - Use constructor injection for all generated fields Hand-written auto-configurations (30 files): - Replace @configuration(proxyBeanMethods=false) with @autoConfiguration - Replace @AutoConfigureAfter/@AutoConfigureBefore with after/before/afterName/beforeName attributes - Replace @Autowired field injection with constructor injection or ObjectProvider - Remove redundant @scope(SCOPE_SINGLETON) from cluster service beans - Fix two CamelMetricsAutoConfiguration classes missing @configuration entirely - Add ElementType.PARAMETER to @CamelAwsXRayTracingStrategy for ObjectProvider usage Skipped (correctly kept as @configuration): - ObservationConditionalAutoConfiguration (loaded via @import, not AutoConfiguration.imports) - MicrometerObservabilityConditionalAutoConfiguration (same reason) - All Converter classes (not auto-configurations)
1 parent 60caf1c commit dbfab9b

31 files changed

Lines changed: 162 additions & 210 deletions

File tree

components-starter/camel-aws-xray-starter/src/main/java/org/apache/camel/aws/xray/starter/AwsXRayAutoConfiguration.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,28 @@
2121
import org.apache.camel.component.aws.xray.TraceAnnotatedTracingStrategy;
2222
import org.apache.camel.component.aws.xray.XRayTracer;
2323
import org.apache.camel.spi.InterceptStrategy;
24-
import org.springframework.beans.factory.annotation.Autowired;
24+
import org.springframework.beans.factory.ObjectProvider;
25+
import org.springframework.boot.autoconfigure.AutoConfiguration;
2526
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2627
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2728
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2829
import org.springframework.context.annotation.Bean;
29-
import org.springframework.context.annotation.Configuration;
3030

31-
@Configuration(proxyBeanMethods = false)
31+
@AutoConfiguration
3232
@EnableConfigurationProperties(AwsXRayConfigurationProperties.class)
3333
@ConditionalOnProperty(value = "camel.aws-xray.enabled", matchIfMissing = true)
3434
public class AwsXRayAutoConfiguration {
3535

36-
@Autowired(required=false)
37-
@CamelAwsXRayTracingStrategy
38-
private InterceptStrategy xRayStrategy;
39-
4036
@Bean
4137
@ConditionalOnMissingBean(XRayTracer.class)
4238
XRayTracer awsTracer(CamelContext context,
43-
AwsXRayConfigurationProperties config) {
39+
AwsXRayConfigurationProperties config,
40+
@CamelAwsXRayTracingStrategy ObjectProvider<InterceptStrategy> xRayStrategyProvider) {
4441
XRayTracer tracer = new XRayTracer();
4542
context.setTracing(true);
4643
tracer.setCamelContext(context);
47-
if(xRayStrategy != null) {
44+
InterceptStrategy xRayStrategy = xRayStrategyProvider.getIfAvailable();
45+
if (xRayStrategy != null) {
4846
tracer.setTracingStrategy(xRayStrategy);
4947
} else if (config.getTracingStrategy() == AwsXRayConfigurationProperties.TracingStrategy.NOOP) {
5048
tracer.setTracingStrategy(new NoopTracingStrategy());

components-starter/camel-aws-xray-starter/src/main/java/org/apache/camel/aws/xray/starter/CamelAwsXRayTracingStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
* Annotate your custom AWS XRay tracing strategy. Will be used if found. Must implement {@link org.apache.camel.spi.InterceptStrategy}.
2929
*
3030
*/
31-
@Target({ ElementType.TYPE, ElementType.FIELD})
31+
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER})
3232
@Retention(RetentionPolicy.RUNTIME)
3333
@Qualifier
3434
public @interface CamelAwsXRayTracingStrategy {

components-starter/camel-consul-cluster-service-starter/src/main/java/org/apache/camel/component/consul/springboot/cluster/ConsulClusterServiceAutoConfiguration.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,25 @@
2020
import org.apache.camel.component.consul.cluster.ConsulClusterService;
2121
import org.apache.camel.spring.boot.CamelAutoConfiguration;
2222
import org.apache.camel.spring.boot.cluster.ClusteredRouteControllerAutoConfiguration;
23-
import org.springframework.beans.factory.annotation.Autowired;
24-
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
25-
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
23+
import org.springframework.boot.autoconfigure.AutoConfiguration;
2624
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2725
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2826
import org.springframework.context.annotation.Bean;
29-
import org.springframework.context.annotation.Configuration;
30-
import org.springframework.context.annotation.Scope;
3127

3228
import java.util.Optional;
3329

34-
@Configuration(proxyBeanMethods = false)
35-
@AutoConfigureBefore({ ClusteredRouteControllerAutoConfiguration.class, CamelAutoConfiguration.class })
30+
@AutoConfiguration(before = { ClusteredRouteControllerAutoConfiguration.class, CamelAutoConfiguration.class })
3631
@ConditionalOnProperty(prefix = "camel.cluster.consul", name = "enabled", matchIfMissing = true)
3732
@EnableConfigurationProperties(ConsulClusterServiceConfiguration.class)
3833
public class ConsulClusterServiceAutoConfiguration {
3934

40-
@Autowired
41-
private ConsulClusterServiceConfiguration configuration;
35+
private final ConsulClusterServiceConfiguration configuration;
36+
37+
public ConsulClusterServiceAutoConfiguration(ConsulClusterServiceConfiguration configuration) {
38+
this.configuration = configuration;
39+
}
4240

4341
@Bean(name = "consul-cluster-service")
44-
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
4542
public CamelClusterService consulClusterService() throws Exception {
4643
ConsulClusterService service = new ConsulClusterService();
4744

components-starter/camel-debug-starter/src/main/java/org/apache/camel/spring/boot/debug/CamelDebugAutoConfiguration.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,14 @@
1717
package org.apache.camel.spring.boot.debug;
1818

1919
import org.apache.camel.main.DebuggerConfigurationProperties;
20-
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
20+
import org.springframework.boot.autoconfigure.AutoConfiguration;
2121
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2222
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2323
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2424
import org.springframework.context.annotation.Bean;
25-
import org.springframework.context.annotation.Configuration;
2625

27-
@Configuration(proxyBeanMethods = false)
26+
@AutoConfiguration(beforeName = "org.apache.camel.spring.boot.CamelAutoConfiguration") // configure early to have Camel debugger during startup
2827
@ConditionalOnProperty(name = "camel.debug.enabled", matchIfMissing = true)
29-
@AutoConfigureBefore(name = "org.apache.camel.spring.boot.CamelAutoConfiguration") // configure early to have Camel debugger during startup
3028
@EnableConfigurationProperties({ CamelDebugConfigurationProperties.class })
3129
public class CamelDebugAutoConfiguration {
3230

components-starter/camel-file-cluster-service-starter/src/main/java/org/apache/camel/component/file/springboot/cluster/FileLockClusterServiceAutoConfiguration.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,23 @@
2424
import org.apache.camel.spring.boot.CamelAutoConfiguration;
2525
import org.apache.camel.spring.boot.cluster.ClusteredRouteControllerAutoConfiguration;
2626
import org.apache.camel.spring.boot.cluster.TimePatternConverter;
27-
import org.springframework.beans.factory.annotation.Autowired;
28-
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
29-
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
27+
import org.springframework.boot.autoconfigure.AutoConfiguration;
3028
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
3129
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3230
import org.springframework.context.annotation.Bean;
33-
import org.springframework.context.annotation.Configuration;
34-
import org.springframework.context.annotation.Scope;
3531

36-
@Configuration
37-
@AutoConfigureBefore({ ClusteredRouteControllerAutoConfiguration.class, CamelAutoConfiguration.class })
32+
@AutoConfiguration(before = { ClusteredRouteControllerAutoConfiguration.class, CamelAutoConfiguration.class })
3833
@ConditionalOnProperty(prefix = "camel.cluster.file", name = "enabled", matchIfMissing = true)
3934
@EnableConfigurationProperties(FileLockClusterServiceConfiguration.class)
4035
public class FileLockClusterServiceAutoConfiguration {
41-
@Autowired
42-
private FileLockClusterServiceConfiguration configuration;
36+
37+
private final FileLockClusterServiceConfiguration configuration;
38+
39+
public FileLockClusterServiceAutoConfiguration(FileLockClusterServiceConfiguration configuration) {
40+
this.configuration = configuration;
41+
}
4342

4443
@Bean(name = "file-lock-cluster-service")
45-
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
4644
public CamelClusterService fileClusterService() throws Exception {
4745
FileLockClusterService service = new FileLockClusterService();
4846

components-starter/camel-http-starter/src/main/java/org/apache/camel/component/http/springboot/HttpComponentSslBundleAutoConfiguration.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,13 @@
2828
import org.apache.hc.client5.http.io.HttpClientConnectionManager;
2929
import org.slf4j.Logger;
3030
import org.slf4j.LoggerFactory;
31-
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
31+
import org.springframework.boot.autoconfigure.AutoConfiguration;
3232
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
3333
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
3434
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
3535
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3636
import org.springframework.boot.ssl.SslBundle;
3737
import org.springframework.boot.ssl.SslBundles;
38-
import org.springframework.context.annotation.Configuration;
3938

4039
import jakarta.annotation.PostConstruct;
4140

@@ -55,12 +54,11 @@
5554
* @see HttpComponentSslBundleConfigurationProperties
5655
* @see org.springframework.boot.ssl.SslBundles
5756
*/
58-
@Configuration(proxyBeanMethods = false)
57+
@AutoConfiguration(after = {CamelAutoConfiguration.class, HttpComponentAutoConfiguration.class})
5958
@ConditionalOnClass({SslBundles.class, HttpComponent.class})
6059
@ConditionalOnBean({SslBundles.class, CamelContext.class})
6160
@ConditionalOnProperty(prefix = "camel.component.http", name = "ssl-bundle")
6261
@EnableConfigurationProperties(HttpComponentSslBundleConfigurationProperties.class)
63-
@AutoConfigureAfter({CamelAutoConfiguration.class, HttpComponentAutoConfiguration.class})
6462
public class HttpComponentSslBundleAutoConfiguration {
6563

6664
private static final Logger LOG = LoggerFactory.getLogger(HttpComponentSslBundleAutoConfiguration.class);

components-starter/camel-infinispan-cluster-service-starter/src/main/java/org/apache/camel/component/infinispan/remote/springboot/cluster/InfinispanRemoteClusterServiceAutoConfiguration.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,25 @@
2020
import org.apache.camel.component.infinispan.remote.cluster.InfinispanRemoteClusterService;
2121
import org.apache.camel.spring.boot.CamelAutoConfiguration;
2222
import org.apache.camel.spring.boot.cluster.ClusteredRouteControllerAutoConfiguration;
23-
import org.springframework.beans.factory.annotation.Autowired;
24-
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
25-
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
23+
import org.springframework.boot.autoconfigure.AutoConfiguration;
2624
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2725
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2826
import org.springframework.context.annotation.Bean;
29-
import org.springframework.context.annotation.Configuration;
30-
import org.springframework.context.annotation.Scope;
3127

3228
import java.util.Optional;
3329

34-
@Configuration
35-
@AutoConfigureBefore({ ClusteredRouteControllerAutoConfiguration.class, CamelAutoConfiguration.class })
30+
@AutoConfiguration(before = { ClusteredRouteControllerAutoConfiguration.class, CamelAutoConfiguration.class })
3631
@ConditionalOnProperty(prefix = "camel.cluster.infinispan.remote", name = "enabled", matchIfMissing = true)
3732
@EnableConfigurationProperties(InfinispanRemoteClusterServiceConfiguration.class)
3833
public class InfinispanRemoteClusterServiceAutoConfiguration {
3934

40-
@Autowired
41-
private InfinispanRemoteClusterServiceConfiguration configuration;
35+
private final InfinispanRemoteClusterServiceConfiguration configuration;
36+
37+
public InfinispanRemoteClusterServiceAutoConfiguration(InfinispanRemoteClusterServiceConfiguration configuration) {
38+
this.configuration = configuration;
39+
}
4240

4341
@Bean(name = "infinispan-remote-cluster-service")
44-
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
4542
public CamelClusterService infinispanRemoteClusterService() {
4643
InfinispanRemoteClusterService service = new InfinispanRemoteClusterService();
4744

components-starter/camel-jasypt-starter/src/main/java/org/apache/camel/component/jasypt/springboot/JasyptEncryptedPropertiesAutoconfiguration.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
2424
import org.jasypt.salt.RandomSaltGenerator;
2525
import org.jasypt.salt.SaltGenerator;
26-
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
26+
import org.springframework.boot.autoconfigure.AutoConfiguration;
2727
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2828
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2929
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -35,7 +35,6 @@
3535
import org.springframework.boot.context.properties.source.ConfigurationPropertySource;
3636
import org.springframework.boot.convert.ApplicationConversionService;
3737
import org.springframework.context.annotation.Bean;
38-
import org.springframework.context.annotation.Configuration;
3938
import org.springframework.core.ResolvableType;
4039
import org.springframework.core.convert.ConversionService;
4140
import org.springframework.core.env.ConfigurableEnvironment;
@@ -53,9 +52,8 @@
5352
import static org.springframework.core.ResolvableType.forClass;
5453
import static org.springframework.core.annotation.AnnotationUtils.findAnnotation;
5554

56-
@Configuration(proxyBeanMethods = false)
55+
@AutoConfiguration(before = CamelAutoConfiguration.class)
5756
@ConditionalOnProperty(name = "camel.component.jasypt.enabled", matchIfMissing = true)
58-
@AutoConfigureBefore(CamelAutoConfiguration.class)
5957
public class JasyptEncryptedPropertiesAutoconfiguration {
6058

6159
@Bean

components-starter/camel-jgroups-raft-cluster-service-starter/src/main/java/org/apache/camel/component/jgroups/raft/springboot/cluster/JGroupsRaftClusterServiceAutoConfiguration.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,25 @@
2020
import org.apache.camel.component.jgroups.raft.cluster.JGroupsRaftClusterService;
2121
import org.apache.camel.spring.boot.CamelAutoConfiguration;
2222
import org.apache.camel.spring.boot.cluster.ClusteredRouteControllerAutoConfiguration;
23-
import org.springframework.beans.factory.annotation.Autowired;
24-
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
25-
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
23+
import org.springframework.boot.autoconfigure.AutoConfiguration;
2624
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2725
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2826
import org.springframework.context.annotation.Bean;
29-
import org.springframework.context.annotation.Configuration;
30-
import org.springframework.context.annotation.Scope;
3127

3228
import java.util.Optional;
3329

34-
@Configuration(proxyBeanMethods = false)
35-
@AutoConfigureBefore({ ClusteredRouteControllerAutoConfiguration.class, CamelAutoConfiguration.class })
30+
@AutoConfiguration(before = { ClusteredRouteControllerAutoConfiguration.class, CamelAutoConfiguration.class })
3631
@ConditionalOnProperty(prefix = "camel.cluster.jgroups-raft", name = "enabled", matchIfMissing = true)
3732
@EnableConfigurationProperties(JGroupsRaftClusterServiceConfiguration.class)
3833
public class JGroupsRaftClusterServiceAutoConfiguration {
3934

40-
@Autowired
41-
private JGroupsRaftClusterServiceConfiguration configuration;
35+
private final JGroupsRaftClusterServiceConfiguration configuration;
36+
37+
public JGroupsRaftClusterServiceAutoConfiguration(JGroupsRaftClusterServiceConfiguration configuration) {
38+
this.configuration = configuration;
39+
}
4240

4341
@Bean(name = "jgroups-raft-cluster-service")
44-
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
4542
public CamelClusterService jgroupsRaftClusterService() throws Exception {
4643
JGroupsRaftClusterService service = new JGroupsRaftClusterService();
4744

components-starter/camel-jolokia-starter/src/main/java/org/apache/camel/component/jolokia/springboot/JolokiaComponentAutoConfiguration.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,18 @@
2222
import org.jolokia.support.spring.SpringJolokiaLogHandlerHolder;
2323
import org.slf4j.Logger;
2424
import org.slf4j.LoggerFactory;
25-
import org.springframework.beans.factory.annotation.Autowired;
25+
import org.springframework.boot.autoconfigure.AutoConfiguration;
2626
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2727
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2828
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2929
import org.springframework.context.annotation.Bean;
30-
import org.springframework.context.annotation.Configuration;
3130

3231
import java.nio.file.Files;
3332
import java.nio.file.Path;
3433
import java.util.HashMap;
3534
import java.util.Map;
3635

37-
@Configuration(proxyBeanMethods = false)
36+
@AutoConfiguration
3837
@ConditionalOnMissingBean(type = "org.jolokia.support.spring.SpringJolokiaAgent")
3938
@EnableConfigurationProperties(JolokiaComponentConfiguration.class)
4039
@ConditionalOnProperty(name = "camel.component.jolokia.enabled", havingValue = "true", matchIfMissing = true)
@@ -44,8 +43,11 @@ public class JolokiaComponentAutoConfiguration {
4443

4544
protected static final String DEFAULT_CA_ON_K8S = "/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt";
4645

47-
@Autowired
48-
private JolokiaComponentConfiguration configuration;
46+
private final JolokiaComponentConfiguration configuration;
47+
48+
public JolokiaComponentAutoConfiguration(JolokiaComponentConfiguration configuration) {
49+
this.configuration = configuration;
50+
}
4951

5052
@Bean
5153
public SpringJolokiaAgent jolokia(final SpringJolokiaConfigHolder camelConfigHolder,

0 commit comments

Comments
 (0)