You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/01/10 11:15:02 UTC

[camel] 01/06: CAMEL-17460: Remove camel-spring-javaconfig which has been deprecated for a long time.

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

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

commit 146180623aef7f58348194ff8143f98cf5c94b07
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Jan 10 11:49:28 2022 +0100

    CAMEL-17460: Remove camel-spring-javaconfig which has been deprecated for a long time.
---
 components/camel-bindy/pom.xml                     |   5 -
 .../BindySimpleFixedLengthObjectMarshallTest.java  | 270 ---------------------
 components/camel-cm-sms/pom.xml                    |   8 -
 .../org/apache/camel/component/cm/test/CMTest.java |  63 ++---
 .../component/cm/test/CamelTestConfiguration.java  |  66 +++--
 components/camel-metrics/pom.xml                   |   5 -
 .../camel/component/metrics/CounterRouteTest.java  |  92 ++++---
 .../camel/component/metrics/GaugeRouteTest.java    | 163 -------------
 .../component/metrics/HistogramRouteTest.java      |  64 +++--
 .../camel/component/metrics/MeterRouteTest.java    |  73 +++---
 .../metrics/MetricComponentSpringTest.java         |  76 +++---
 .../camel/component/metrics/TimerRouteTest.java    |  72 +++---
 components/camel-micrometer/pom.xml                |   8 -
 .../component/micrometer/CounterRouteTest.java     |  84 +++----
 .../micrometer/DistributionSummaryRouteTest.java   |  62 ++---
 .../micrometer/MetricComponentSpringTest.java      |  51 ++--
 .../camel/component/micrometer/TimerRouteTest.java |  94 +++----
 components/camel-spring-batch/pom.xml              |   5 -
 .../spring/batch/SpringBatchJobRegistryTest.java   | 163 -------------
 19 files changed, 347 insertions(+), 1077 deletions(-)

diff --git a/components/camel-bindy/pom.xml b/components/camel-bindy/pom.xml
index fe2e1b9..369f075 100644
--- a/components/camel-bindy/pom.xml
+++ b/components/camel-bindy/pom.xml
@@ -60,11 +60,6 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-spring-javaconfig</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter</artifactId>
             <scope>test</scope>
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/marshall/simple/BindySimpleFixedLengthObjectMarshallTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/marshall/simple/BindySimpleFixedLengthObjectMarshallTest.java
deleted file mode 100644
index 2782833..0000000
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/marshall/simple/BindySimpleFixedLengthObjectMarshallTest.java
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.dataformat.bindy.fixed.marshall.simple;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.List;
-
-import org.apache.camel.EndpointInject;
-import org.apache.camel.Produce;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.dataformat.bindy.annotation.DataField;
-import org.apache.camel.dataformat.bindy.annotation.FixedLengthRecord;
-import org.apache.camel.model.dataformat.BindyDataFormat;
-import org.apache.camel.model.dataformat.BindyType;
-import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
-import org.apache.camel.test.spring.junit5.CamelSpringTest;
-import org.junit.jupiter.api.Test;
-import org.springframework.context.annotation.Bean;
-import org.springframework.test.annotation.DirtiesContext;
-import org.springframework.test.context.ContextConfiguration;
-
-@ContextConfiguration(
-                      classes = {
-                              BindySimpleFixedLengthObjectMarshallTest.Configuration.class })
-@CamelSpringTest
-public class BindySimpleFixedLengthObjectMarshallTest {
-
-    private static final String URI_MOCK_RESULT = "mock:result";
-    private static final String URI_MOCK_ERROR = "mock:error";
-    private static final String URI_DIRECT_START = "direct:start";
-
-    private String expected;
-
-    @Produce(URI_DIRECT_START)
-    private ProducerTemplate template;
-
-    @EndpointInject(URI_MOCK_RESULT)
-    private MockEndpoint result;
-
-    @EndpointInject(URI_MOCK_ERROR)
-    private MockEndpoint error;
-
-    public static class Configuration extends SingleRouteCamelConfiguration {
-
-        @Bean
-        @Override
-        public RouteBuilder route() {
-            return new RouteBuilder() {
-                public void configure() {
-                    // default should errors go to mock:error
-                    errorHandler(deadLetterChannel(URI_MOCK_ERROR).redeliveryDelay(0));
-
-                    onException(Exception.class).maximumRedeliveries(0).handled(true);
-
-                    BindyDataFormat bindy = new BindyDataFormat();
-                    bindy.setLocale("en");
-                    bindy.setClassType(Order.class);
-                    bindy.type(BindyType.Fixed);
-
-                    from(URI_DIRECT_START)
-                            .marshal(bindy)
-                            .to(URI_MOCK_RESULT);
-                }
-            };
-        }
-    }
-
-    @Test
-    @DirtiesContext
-    public void testMarshallObject() throws Exception {
-        expected = "10A9  PaulineM    ISINXD12345678BUYShare000002500.45USD01-08-2009\r\n";
-        result.expectedBodiesReceived(expected);
-        error.expectedMessageCount(0);
-
-        template.sendBody(generateModel("Pauline"));
-        error.assertIsSatisfied();
-        result.assertIsSatisfied();
-    }
-
-    @Test
-    @DirtiesContext
-    public void testMarshallList() throws Exception {
-        expected = "10A9  PaulineM    ISINXD12345678BUYShare000002500.45USD01-08-2009\r\n"
-                   + "10A9  MarcoolM    ISINXD12345678BUYShare000002500.45USD01-08-2009\r\n";
-        result.expectedBodiesReceived(expected);
-        error.expectedMessageCount(0);
-
-        List<Order> list = new ArrayList<>();
-        list.add(generateModel("Pauline"));
-        list.add(generateModel("Marcool"));
-        template.sendBody(list);
-        error.assertIsSatisfied();
-        result.assertIsSatisfied();
-    }
-
-    public Order generateModel(String firstName) {
-        Order order = new Order();
-        order.setOrderNr(10);
-        order.setOrderType("BUY");
-        order.setClientNr("A9");
-        order.setFirstName(firstName);
-        order.setLastName("M");
-        order.setAmount(new BigDecimal("2500.45"));
-        order.setInstrumentCode("ISIN");
-        order.setInstrumentNumber("XD12345678");
-        order.setInstrumentType("Share");
-        order.setCurrency("USD");
-
-        Calendar calendar = new GregorianCalendar();
-        calendar.set(2009, 7, 1);
-        order.setOrderDate(calendar.getTime());
-
-        return order;
-    }
-
-    @FixedLengthRecord(length = 65, paddingChar = ' ')
-    public static class Order {
-
-        @DataField(pos = 1, length = 2)
-        private int orderNr;
-
-        @DataField(pos = 3, length = 2)
-        private String clientNr;
-
-        @DataField(pos = 5, length = 9)
-        private String firstName;
-
-        @DataField(pos = 14, length = 5, align = "L")
-        private String lastName;
-
-        @DataField(pos = 19, length = 4)
-        private String instrumentCode;
-
-        @DataField(pos = 23, length = 10)
-        private String instrumentNumber;
-
-        @DataField(pos = 33, length = 3)
-        private String orderType;
-
-        @DataField(pos = 36, length = 5)
-        private String instrumentType;
-
-        @DataField(pos = 41, precision = 2, length = 12, paddingChar = '0')
-        private BigDecimal amount;
-
-        @DataField(pos = 53, length = 3)
-        private String currency;
-
-        @DataField(pos = 56, length = 10, pattern = "dd-MM-yyyy")
-        private Date orderDate;
-
-        public int getOrderNr() {
-            return orderNr;
-        }
-
-        public void setOrderNr(int orderNr) {
-            this.orderNr = orderNr;
-        }
-
-        public String getClientNr() {
-            return clientNr;
-        }
-
-        public void setClientNr(String clientNr) {
-            this.clientNr = clientNr;
-        }
-
-        public String getFirstName() {
-            return firstName;
-        }
-
-        public void setFirstName(String firstName) {
-            this.firstName = firstName;
-        }
-
-        public String getLastName() {
-            return lastName;
-        }
-
-        public void setLastName(String lastName) {
-            this.lastName = lastName;
-        }
-
-        public String getInstrumentCode() {
-            return instrumentCode;
-        }
-
-        public void setInstrumentCode(String instrumentCode) {
-            this.instrumentCode = instrumentCode;
-        }
-
-        public String getInstrumentNumber() {
-            return instrumentNumber;
-        }
-
-        public void setInstrumentNumber(String instrumentNumber) {
-            this.instrumentNumber = instrumentNumber;
-        }
-
-        public String getOrderType() {
-            return orderType;
-        }
-
-        public void setOrderType(String orderType) {
-            this.orderType = orderType;
-        }
-
-        public String getInstrumentType() {
-            return instrumentType;
-        }
-
-        public void setInstrumentType(String instrumentType) {
-            this.instrumentType = instrumentType;
-        }
-
-        public BigDecimal getAmount() {
-            return amount;
-        }
-
-        public void setAmount(BigDecimal amount) {
-            this.amount = amount;
-        }
-
-        public String getCurrency() {
-            return currency;
-        }
-
-        public void setCurrency(String currency) {
-            this.currency = currency;
-        }
-
-        public Date getOrderDate() {
-            return orderDate;
-        }
-
-        public void setOrderDate(Date orderDate) {
-            this.orderDate = orderDate;
-        }
-
-        @Override
-        public String toString() {
-            return "Model : " + Order.class.getName() + " : " + this.orderNr + ", " + this.orderType + ", "
-                   + String.valueOf(this.amount) + ", " + this.instrumentCode + ", "
-                   + this.instrumentNumber + ", " + this.instrumentType + ", " + this.currency + ", " + this.clientNr + ", "
-                   + this.firstName + ", " + this.lastName + ", "
-                   + String.valueOf(this.orderDate);
-        }
-    }
-
-}
diff --git a/components/camel-cm-sms/pom.xml b/components/camel-cm-sms/pom.xml
index d663539..8666229 100644
--- a/components/camel-cm-sms/pom.xml
+++ b/components/camel-cm-sms/pom.xml
@@ -32,9 +32,6 @@
     <name>Camel :: CM SMS</name>
     <description>Camel CM SMS Gateway Component</description>
 
-    <properties>
-    </properties>
-
     <dependencies>
 
         <dependency>
@@ -81,11 +78,6 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-spring-javaconfig</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>org.apache.logging.log4j</groupId>
             <artifactId>log4j-slf4j-impl</artifactId>
             <scope>test</scope>
diff --git a/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMTest.java b/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMTest.java
index a0662da..26e4102 100644
--- a/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMTest.java
+++ b/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CMTest.java
@@ -21,7 +21,6 @@ import java.security.SecureRandom;
 
 import com.google.i18n.phonenumbers.PhoneNumberUtil;
 import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
-import org.apache.camel.CamelContext;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
 import org.apache.camel.InvalidPayloadRuntimeException;
@@ -57,27 +56,14 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.test.context.ContextConfiguration;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
 @CamelSpringTest
-@ContextConfiguration(classes = { CamelTestConfiguration.class })
-public class CMTest {
-
-    // dependency: camel-spring-javaconfig
+public class CMTest extends CamelTestConfiguration {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(CMTest.class);
 
-    @Autowired
-    ApplicationContext applicationContext;
-
-    @Autowired
-    private CamelContext camelContext;
-
     private SecureRandom random = new SecureRandom();
 
     private final PhoneNumberUtil pnu = PhoneNumberUtil.getInstance();
@@ -92,15 +78,14 @@ public class CMTest {
     @BeforeEach
     public void beforeTest() throws Exception {
         mock.reset();
-        camelContext.getRouteController().startRoute(CamelTestConfiguration.SIMPLE_ROUTE_ID);
+        context.getRouteController().startRoute(CamelTestConfiguration.SIMPLE_ROUTE_ID);
         validNumber = pnu.format(pnu.getExampleNumber("ES"), PhoneNumberFormat.E164);
     }
 
     @AfterEach
     public void afterTest() {
-
         try {
-            camelContext.getRouteController().stopRoute(CamelTestConfiguration.SIMPLE_ROUTE_ID);
+            context.getRouteController().stopRoute(CamelTestConfiguration.SIMPLE_ROUTE_ID);
         } catch (Exception e) {
             LOGGER.error("Exception trying to stop de routes", e);
         }
@@ -116,7 +101,7 @@ public class CMTest {
                 = "cm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&testConnectionOnStartup=true";
 
         assertThrows(ResolveEndpointFailedException.class,
-                () -> camelContext.getEndpoint(schemedUri));
+                () -> context.getEndpoint(schemedUri));
     }
 
     @Test
@@ -125,7 +110,7 @@ public class CMTest {
                 = "cm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&testConnectionOnStartup=true";
 
         assertThrows(ResolveEndpointFailedException.class,
-                () -> camelContext.getEndpoint(schemedUri));
+                () -> context.getEndpoint(schemedUri));
     }
 
     @Test
@@ -133,7 +118,7 @@ public class CMTest {
         // cm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&productToken=ea723fd7-da81-4826-89bc-fa7144e71c40&testConnectionOnStartup=true
         String schemedUri
                 = "cm-sms://dummy.sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&productToken=ea723fd7-da81-4826-89bc-fa7144e71c40&testConnectionOnStartup=true";
-        Service service = camelContext.getEndpoint(schemedUri).createProducer();
+        Service service = context.getEndpoint(schemedUri).createProducer();
         assertThrows(HostUnavailableException.class,
                 () -> service.start());
     }
@@ -143,7 +128,7 @@ public class CMTest {
         // cm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=MyBusiness&defaultMaxNumberOfParts=8&productToken=ea723fd7-da81-4826-89bc-fa7144e71c40&testConnectionOnStartup=true
         String schemedUri = "cm-sms://https://demo.com";
         assertThrows(ResolveEndpointFailedException.class,
-                () -> camelContext.getEndpoint(schemedUri));
+                () -> context.getEndpoint(schemedUri));
     }
 
     /*
@@ -170,7 +155,7 @@ public class CMTest {
 
         // Change sending strategy
         CMEndpoint endpoint
-                = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+                = (CMEndpoint) context.getEndpoint(getUri());
         CMProducer producer = endpoint.createProducer();
         producer.setSender(new NoAccountFoundForProductTokenExceptionSender());
 
@@ -189,7 +174,7 @@ public class CMTest {
 
         // Change sending strategy
         CMEndpoint endpoint
-                = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+                = (CMEndpoint) context.getEndpoint(getUri());
         CMProducer producer = endpoint.createProducer();
         producer.setSender(new CMResponseExceptionSender());
 
@@ -204,7 +189,7 @@ public class CMTest {
 
         // Change sending strategy
         CMEndpoint endpoint
-                = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+                = (CMEndpoint) context.getEndpoint(getUri());
         CMProducer producer = endpoint.createProducer();
         producer.setSender(new InsufficientBalanceExceptionSender());
 
@@ -219,7 +204,7 @@ public class CMTest {
 
         // Change sending strategy
         CMEndpoint endpoint
-                = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+                = (CMEndpoint) context.getEndpoint(getUri());
         CMProducer producer = endpoint.createProducer();
         producer.setSender(new InvalidMSISDNExceptionSender());
 
@@ -234,7 +219,7 @@ public class CMTest {
 
         // Change sending strategy
         CMEndpoint endpoint
-                = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+                = (CMEndpoint) context.getEndpoint(getUri());
         CMProducer producer = endpoint.createProducer();
         producer.setSender(new InvalidProductTokenExceptionSender());
 
@@ -249,7 +234,7 @@ public class CMTest {
 
         // Change sending strategy
         CMEndpoint endpoint
-                = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+                = (CMEndpoint) context.getEndpoint(getUri());
         CMProducer producer = endpoint.createProducer();
         producer.setSender(new NoMessageExceptionSender());
 
@@ -263,8 +248,7 @@ public class CMTest {
     public void testNotPhoneNumberFoundException() throws Exception {
 
         // Change sending strategy
-        CMEndpoint endpoint
-                = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        CMEndpoint endpoint = (CMEndpoint) context.getEndpoint(getUri());
         CMProducer producer = endpoint.createProducer();
         producer.setSender(new NotPhoneNumberFoundExceptionSender());
 
@@ -278,8 +262,7 @@ public class CMTest {
     public void testUnknownErrorException() throws Exception {
 
         // Change sending strategy
-        CMEndpoint endpoint
-                = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        CMEndpoint endpoint = (CMEndpoint) context.getEndpoint(getUri());
         CMProducer producer = endpoint.createProducer();
         producer.setSender(new UnknownErrorExceptionSender());
 
@@ -293,8 +276,7 @@ public class CMTest {
     public void testUnroutableMessageException() throws Exception {
 
         // Change sending strategy
-        CMEndpoint endpoint
-                = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        CMEndpoint endpoint = (CMEndpoint) context.getEndpoint(getUri());
         CMProducer producer = endpoint.createProducer();
         producer.setSender(new UnroutableMessageExceptionSender());
 
@@ -308,23 +290,12 @@ public class CMTest {
     public void testCMEndpointIsForProducing() {
 
         // Change sending strategy
-        CMEndpoint endpoint
-                = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
+        CMEndpoint endpoint = (CMEndpoint) context.getEndpoint(getUri());
         assertThrows(UnsupportedOperationException.class,
                 () -> endpoint.createConsumer(null));
     }
 
     @Test
-    public void testCMEndpointGetHost() {
-
-        // Change sending strategy
-        CMEndpoint endpoint
-                = (CMEndpoint) camelContext.getEndpoint(applicationContext.getBean(CamelTestConfiguration.class).getUri());
-        assertEquals(applicationContext.getEnvironment().getRequiredProperty("cm.url"), endpoint.getHost(),
-                "Endpoint host and environment property do not match");
-    }
-
-    @Test
     public void testSendInvalidPayload() {
 
         // Body
diff --git a/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CamelTestConfiguration.java b/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CamelTestConfiguration.java
index 96a5dcb..43284e4 100644
--- a/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CamelTestConfiguration.java
+++ b/components/camel-cm-sms/src/test/java/org/apache/camel/component/cm/test/CamelTestConfiguration.java
@@ -16,69 +16,59 @@
  */
 package org.apache.camel.component.cm.test;
 
+import java.io.FileInputStream;
+import java.util.Properties;
+
+import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.core.env.Environment;
-import org.springframework.util.Assert;
-import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.support.AbstractApplicationContext;
 
 /**
  * Builds a SimpleRoute to send a message to CM GW and CM Uri is built based on properties in a file.
  */
-@Configuration("cmConfig")
-@PropertySource("classpath:/cm-smsgw.properties")
-public class CamelTestConfiguration extends SingleRouteCamelConfiguration {
+public abstract class CamelTestConfiguration extends CamelSpringTestSupport {
 
     public static final String SIMPLE_ROUTE_ID = "simple-route";
 
     private String uri;
 
     @Override
-    public RouteBuilder route() {
-        return new RouteBuilder() {
+    protected AbstractApplicationContext createApplicationContext() {
+        return new AnnotationConfigApplicationContext();
+    }
 
-            @Override
-            public void configure() throws Exception {
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
 
-                Assert.hasLength(uri, "The URI string should not be empty or null");
+        loadProperties();
 
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
                 log.debug("CM Component is an URI based component\nCM URI: {}", uri);
 
                 // Route definition
                 from("direct:sms").to(uri).to("mock:test")
                         .routeId(SIMPLE_ROUTE_ID);
-
             }
-        };
-    }
+        });
 
-    @Bean
-    public LocalValidatorFactoryBean getValidatorFactory() {
-        final LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
-        localValidatorFactoryBean.getValidationPropertyMap()
-                .put("hibernate.validator.fail_fast", "true");
-        return localValidatorFactoryBean;
+        return context;
     }
 
     /**
      * Build the URI of the CM Component based on Environmental properties
      */
-    @Override
-    public final void setApplicationContext(
-            final ApplicationContext applicationContext) {
-
-        super.setApplicationContext(applicationContext);
-
-        final Environment env = applicationContext.getEnvironment();
+    private void loadProperties() throws Exception {
+        Properties prop = new Properties();
+        prop.load(new FileInputStream("src/test/resources/cm-smsgw.properties"));
 
-        final String host = env.getRequiredProperty("cm.url");
-        final String productTokenString = env
-                .getRequiredProperty("cm.product-token");
-        final String sender = env.getRequiredProperty("cm.default-sender");
+        final String host = prop.getProperty("cm.url");
+        final String productTokenString = prop.getProperty("cm.product-token");
+        final String sender = prop.getProperty("cm.default-sender");
 
         final StringBuffer cmUri = new StringBuffer("cm-sms:" + host)
                 .append("?productToken=").append(productTokenString);
@@ -88,7 +78,7 @@ public class CamelTestConfiguration extends SingleRouteCamelConfiguration {
 
         // Defaults to false
         final Boolean testConnectionOnStartup = Boolean.parseBoolean(
-                env.getProperty("cm.testConnectionOnStartup", "false"));
+                prop.getProperty("cm.testConnectionOnStartup", "false"));
         if (testConnectionOnStartup) {
             cmUri.append("&testConnectionOnStartup=")
                     .append(testConnectionOnStartup.toString());
@@ -96,7 +86,7 @@ public class CamelTestConfiguration extends SingleRouteCamelConfiguration {
 
         // Defaults to 8
         final Integer defaultMaxNumberOfParts = Integer
-                .parseInt(env.getProperty("defaultMaxNumberOfParts", "8"));
+                .parseInt(prop.getProperty("defaultMaxNumberOfParts", "8"));
         cmUri.append("&defaultMaxNumberOfParts=")
                 .append(defaultMaxNumberOfParts.toString());
 
diff --git a/components/camel-metrics/pom.xml b/components/camel-metrics/pom.xml
index 499600d..4a77f65 100644
--- a/components/camel-metrics/pom.xml
+++ b/components/camel-metrics/pom.xml
@@ -92,11 +92,6 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-spring-javaconfig</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
             <artifactId>camel-test-spring-junit5</artifactId>
             <scope>test</scope>
         </dependency>
diff --git a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/CounterRouteTest.java b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/CounterRouteTest.java
index 1d2bc27..f943fb8 100644
--- a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/CounterRouteTest.java
+++ b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/CounterRouteTest.java
@@ -21,22 +21,21 @@ import java.util.Map;
 
 import com.codahale.metrics.Counter;
 import com.codahale.metrics.MetricRegistry;
+import org.apache.camel.CamelContext;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
-import org.apache.camel.test.spring.junit5.MockEndpoints;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
 import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.InOrder;
 import org.mockito.Mockito;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.test.context.ContextConfiguration;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.support.AbstractApplicationContext;
 
 import static org.apache.camel.component.metrics.MetricsComponent.METRIC_REGISTRY_NAME;
 import static org.apache.camel.component.metrics.MetricsConstants.HEADER_COUNTER_DECREMENT;
@@ -48,10 +47,7 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
 @CamelSpringTest
-@ContextConfiguration(
-                      classes = { CounterRouteTest.TestConfig.class })
-@MockEndpoints
-public class CounterRouteTest {
+public class CounterRouteTest extends CamelSpringTestSupport {
 
     @EndpointInject("mock:out")
     private MockEndpoint endpoint;
@@ -74,49 +70,47 @@ public class CounterRouteTest {
 
     private InOrder inOrder;
 
-    @Configuration
-    public static class TestConfig extends SingleRouteCamelConfiguration {
-
-        @Bean
-        @Override
-        public RouteBuilder route() {
-            return new RouteBuilder() {
-
-                @Override
-                public void configure() throws Exception {
-                    from("direct:in-1")
-                            .to("metrics:counter:A?increment=5")
-                            .to("mock:out");
-
-                    from("direct:in-2")
-                            .to("metrics:counter:A?decrement=9")
-                            .to("mock:out");
-
-                    from("direct:in-3")
-                            .setHeader(HEADER_COUNTER_INCREMENT, constant(417L))
-                            .to("metrics:counter:A")
-                            .to("mock:out");
-
-                    from("direct:in-4")
-                            .setHeader(HEADER_COUNTER_INCREMENT, simple("${body.length}"))
-                            .to("metrics:counter:A")
-                            .to("mock:out");
-                }
-            };
-        }
-
-        @Bean(name = METRIC_REGISTRY_NAME)
-        public MetricRegistry getMetricRegistry() {
-            return Mockito.mock(MetricRegistry.class);
-        }
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new AnnotationConfigApplicationContext();
     }
 
-    @BeforeEach
-    public void setup() {
-        // TODO - 12.05.2014, Lauri - is there any better way to set this up?
-        mockRegistry = endpoint.getCamelContext().getRegistry().lookupByNameAndType(METRIC_REGISTRY_NAME, MetricRegistry.class);
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+
+        mockRegistry = Mockito.mock(MetricRegistry.class);
+        context.getRegistry().bind(METRIC_REGISTRY_NAME, mockRegistry);
         mockCounter = mock(Counter.class);
         inOrder = Mockito.inOrder(mockRegistry, mockCounter);
+
+        return context;
+    }
+
+    @Override
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:in-1")
+                        .to("metrics:counter:A?increment=5")
+                        .to("mock:out");
+
+                from("direct:in-2")
+                        .to("metrics:counter:A?decrement=9")
+                        .to("mock:out");
+
+                from("direct:in-3")
+                        .setHeader(HEADER_COUNTER_INCREMENT, constant(417L))
+                        .to("metrics:counter:A")
+                        .to("mock:out");
+
+                from("direct:in-4")
+                        .setHeader(HEADER_COUNTER_INCREMENT, simple("${body.length}"))
+                        .to("metrics:counter:A")
+                        .to("mock:out");
+            }
+        };
     }
 
     @AfterEach
diff --git a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/GaugeRouteTest.java b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/GaugeRouteTest.java
deleted file mode 100644
index ec2d50c..0000000
--- a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/GaugeRouteTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.metrics;
-
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import com.codahale.metrics.Gauge;
-import com.codahale.metrics.MetricRegistry;
-import org.apache.camel.EndpointInject;
-import org.apache.camel.Produce;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.metrics.GaugeProducer.CamelMetricsGauge;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
-import org.apache.camel.test.spring.junit5.CamelSpringTest;
-import org.apache.camel.test.spring.junit5.MockEndpoints;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.ArgumentMatcher;
-import org.mockito.Mockito;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.test.context.ContextConfiguration;
-
-import static org.apache.camel.component.metrics.MetricsComponent.METRIC_REGISTRY_NAME;
-import static org.apache.camel.component.metrics.MetricsConstants.HEADER_GAUGE_SUBJECT;
-import static org.apache.camel.component.metrics.MetricsConstants.HEADER_METRIC_NAME;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.argThat;
-import static org.mockito.Mockito.eq;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@CamelSpringTest
-@ContextConfiguration(
-                      classes = { GaugeRouteTest.TestConfig.class })
-@MockEndpoints
-public class GaugeRouteTest {
-
-    private static SortedMap<String, Gauge> mockGauges = new TreeMap<>();
-
-    @EndpointInject("mock:out")
-    private MockEndpoint endpoint;
-
-    @Produce("direct:in-1")
-    private ProducerTemplate producer1;
-
-    @Produce("direct:in-2")
-    private ProducerTemplate producer2;
-
-    private MetricRegistry mockRegistry;
-
-    @Configuration
-    public static class TestConfig extends SingleRouteCamelConfiguration {
-
-        @Bean
-        @Override
-        public RouteBuilder route() {
-            return new RouteBuilder() {
-
-                @Override
-                public void configure() throws Exception {
-                    from("direct:in-1")
-                            .to("metrics:gauge:A?subject=#mySubject")
-                            .to("mock:out");
-
-                    from("direct:in-2")
-                            .setHeader(HEADER_METRIC_NAME, constant("B"))
-                            .setHeader(HEADER_GAUGE_SUBJECT, constant("my overriding subject"))
-                            .to("metrics:gauge:A?subject=#mySubject")
-                            .to("mock:out");
-
-                }
-            };
-        }
-
-        @Bean(name = METRIC_REGISTRY_NAME)
-        public MetricRegistry getMetricRegistry() {
-            MetricRegistry registry = Mockito.mock(MetricRegistry.class);
-            when(registry.getGauges()).thenReturn(mockGauges);
-            when(registry.register(anyString(), any())).then(
-                    new Answer<CamelMetricsGauge>() {
-                        @Override
-                        public CamelMetricsGauge answer(InvocationOnMock invocation) throws Throwable {
-                            mockGauges.put(invocation.getArgument(0), invocation.getArgument(1));
-                            return invocation.getArgument(1);
-                        }
-                    });
-            return registry;
-        }
-
-        @Bean(name = "mySubject")
-        public String getSubject() {
-            return "my subject";
-        }
-    }
-
-    @BeforeEach
-    public void setup() {
-        // TODO - 12.05.2014, Lauri - is there any better way to set this up?
-        mockRegistry = endpoint.getCamelContext().getRegistry().lookupByNameAndType(METRIC_REGISTRY_NAME, MetricRegistry.class);
-    }
-
-    @AfterEach
-    public void tearDown() {
-        endpoint.reset();
-        mockGauges.clear();
-    }
-
-    @Test
-    public void testDefault() throws Exception {
-        endpoint.expectedMessageCount(1);
-        producer1.sendBody(new Object());
-        endpoint.assertIsSatisfied();
-        verify(mockRegistry, times(1)).register(eq("A"), argThat(new ArgumentMatcher<CamelMetricsGauge>() {
-            @Override
-            public boolean matches(CamelMetricsGauge argument) {
-                return "my subject".equals(argument.getValue());
-            }
-        }));
-    }
-
-    @Test
-    public void testOverride() throws Exception {
-        verify(mockRegistry, times(1)).register(eq("A"), argThat(new ArgumentMatcher<CamelMetricsGauge>() {
-            @Override
-            public boolean matches(CamelMetricsGauge argument) {
-                return "my subject".equals(argument.getValue());
-            }
-        }));
-        endpoint.expectedMessageCount(1);
-        producer2.sendBody(new Object());
-        endpoint.assertIsSatisfied();
-        verify(mockRegistry, times(1)).register(eq("B"), argThat(new ArgumentMatcher<CamelMetricsGauge>() {
-            @Override
-            public boolean matches(CamelMetricsGauge argument) {
-                return "my overriding subject".equals(argument.getValue());
-            }
-        }));
-    }
-
-}
diff --git a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/HistogramRouteTest.java b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/HistogramRouteTest.java
index 8692964..10f645f9 100644
--- a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/HistogramRouteTest.java
+++ b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/HistogramRouteTest.java
@@ -18,22 +18,21 @@ package org.apache.camel.component.metrics;
 
 import com.codahale.metrics.Histogram;
 import com.codahale.metrics.MetricRegistry;
+import org.apache.camel.CamelContext;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
-import org.apache.camel.test.spring.junit5.MockEndpoints;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
 import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.InOrder;
 import org.mockito.Mockito;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.test.context.ContextConfiguration;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.support.AbstractApplicationContext;
 
 import static org.apache.camel.component.metrics.MetricsComponent.METRIC_REGISTRY_NAME;
 import static org.apache.camel.component.metrics.MetricsConstants.HEADER_HISTOGRAM_VALUE;
@@ -43,10 +42,7 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
 @CamelSpringTest
-@ContextConfiguration(
-                      classes = { HistogramRouteTest.TestConfig.class })
-@MockEndpoints
-public class HistogramRouteTest {
+public class HistogramRouteTest extends CamelSpringTestSupport {
 
     @EndpointInject("mock:out")
     private MockEndpoint endpoint;
@@ -60,35 +56,33 @@ public class HistogramRouteTest {
 
     private InOrder inOrder;
 
-    @Configuration
-    public static class TestConfig extends SingleRouteCamelConfiguration {
-
-        @Bean
-        @Override
-        public RouteBuilder route() {
-            return new RouteBuilder() {
-
-                @Override
-                public void configure() throws Exception {
-                    from("direct:in")
-                            .to("metrics:histogram:A?value=332491")
-                            .to("mock:out");
-                }
-            };
-        }
-
-        @Bean(name = METRIC_REGISTRY_NAME)
-        public MetricRegistry getMetricRegistry() {
-            return Mockito.mock(MetricRegistry.class);
-        }
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new AnnotationConfigApplicationContext();
     }
 
-    @BeforeEach
-    public void setup() {
-        // TODO - 12.05.2014, Lauri - is there any better way to set this up?
-        mockRegistry = endpoint.getCamelContext().getRegistry().lookupByNameAndType(METRIC_REGISTRY_NAME, MetricRegistry.class);
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+
+        mockRegistry = Mockito.mock(MetricRegistry.class);
+        context.getRegistry().bind(METRIC_REGISTRY_NAME, mockRegistry);
         mockHistogram = Mockito.mock(Histogram.class);
         inOrder = Mockito.inOrder(mockRegistry, mockHistogram);
+
+        return context;
+    }
+
+    @Override
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:in")
+                        .to("metrics:histogram:A?value=332491")
+                        .to("mock:out");
+            }
+        };
     }
 
     @AfterEach
diff --git a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MeterRouteTest.java b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MeterRouteTest.java
index 5cddf95..3d42b0a 100644
--- a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MeterRouteTest.java
+++ b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MeterRouteTest.java
@@ -18,22 +18,21 @@ package org.apache.camel.component.metrics;
 
 import com.codahale.metrics.Meter;
 import com.codahale.metrics.MetricRegistry;
+import org.apache.camel.CamelContext;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
-import org.apache.camel.test.spring.junit5.MockEndpoints;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
 import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.InOrder;
 import org.mockito.Mockito;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.test.context.ContextConfiguration;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.support.AbstractApplicationContext;
 
 import static org.apache.camel.component.metrics.MetricsComponent.METRIC_REGISTRY_NAME;
 import static org.apache.camel.component.metrics.MetricsConstants.HEADER_METER_MARK;
@@ -43,10 +42,7 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
 @CamelSpringTest
-@ContextConfiguration(
-                      classes = { MeterRouteTest.TestConfig.class })
-@MockEndpoints
-public class MeterRouteTest {
+public class MeterRouteTest extends CamelSpringTestSupport {
 
     @EndpointInject("mock:out")
     private MockEndpoint endpoint;
@@ -63,40 +59,39 @@ public class MeterRouteTest {
 
     private InOrder inOrder;
 
-    @Configuration
-    public static class TestConfig extends SingleRouteCamelConfiguration {
-
-        @Bean
-        @Override
-        public RouteBuilder route() {
-            return new RouteBuilder() {
-
-                @Override
-                public void configure() throws Exception {
-                    from("direct:in-1")
-                            .to("metrics:meter:A?mark=3179")
-                            .to("mock:out");
-
-                    from("direct:in-2")
-                            .to("metrics:meter:A")
-                            .to("mock:out");
-                }
-            };
-        }
-
-        @Bean(name = METRIC_REGISTRY_NAME)
-        public MetricRegistry getMetricRegistry() {
-            return Mockito.mock(MetricRegistry.class);
-        }
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new AnnotationConfigApplicationContext();
     }
 
-    @BeforeEach
-    public void setup() {
-        // TODO - 12.05.2014, Lauri - is there any better way to set this up?
-        mockRegistry = endpoint.getCamelContext().getRegistry().lookupByNameAndType(METRIC_REGISTRY_NAME, MetricRegistry.class);
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+
+        mockRegistry = Mockito.mock(MetricRegistry.class);
+        context.getRegistry().bind(METRIC_REGISTRY_NAME, mockRegistry);
+
         mockMeter = Mockito.mock(Meter.class);
         inOrder = Mockito.inOrder(mockRegistry, mockMeter);
         when(mockRegistry.meter("A")).thenReturn(mockMeter);
+
+        return context;
+    }
+
+    @Override
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:in-1")
+                        .to("metrics:meter:A?mark=3179")
+                        .to("mock:out");
+
+                from("direct:in-2")
+                        .to("metrics:meter:A")
+                        .to("mock:out");
+            }
+        };
     }
 
     @AfterEach
diff --git a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MetricComponentSpringTest.java b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MetricComponentSpringTest.java
index 9c46d29..5e536f2 100644
--- a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MetricComponentSpringTest.java
+++ b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/MetricComponentSpringTest.java
@@ -18,29 +18,27 @@ package org.apache.camel.component.metrics;
 
 import com.codahale.metrics.Counter;
 import com.codahale.metrics.MetricRegistry;
+import org.apache.camel.CamelContext;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
-import org.apache.camel.test.spring.junit5.MockEndpoints;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
 import org.junit.jupiter.api.Test;
 import org.mockito.InOrder;
 import org.mockito.Mockito;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.test.context.ContextConfiguration;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.support.AbstractApplicationContext;
 
+import static org.apache.camel.component.metrics.MetricsComponent.METRIC_REGISTRY_NAME;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
 @CamelSpringTest
-@ContextConfiguration(
-                      classes = { MetricComponentSpringTest.TestConfig.class })
-@MockEndpoints
-public class MetricComponentSpringTest {
+public class MetricComponentSpringTest extends CamelSpringTestSupport {
 
     @EndpointInject("mock:out")
     private MockEndpoint endpoint;
@@ -48,36 +46,44 @@ public class MetricComponentSpringTest {
     @Produce("direct:in")
     private ProducerTemplate producer;
 
-    @Configuration
-    public static class TestConfig extends SingleRouteCamelConfiguration {
-
-        @Bean
-        @Override
-        public RouteBuilder route() {
-            return new RouteBuilder() {
-
-                @Override
-                public void configure() throws Exception {
-                    from("direct:in")
-                            .to("metrics:counter:A?increment=512")
-                            .to("mock:out");
-                }
-            };
-        }
-
-        @Bean(name = MetricsComponent.METRIC_REGISTRY_NAME)
-        public MetricRegistry getMetricRegistry() {
-            return Mockito.mock(MetricRegistry.class);
-        }
+    private MetricRegistry mockRegistry;
+
+    private InOrder inOrder;
+
+    private Counter mockCounter;
+
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new AnnotationConfigApplicationContext();
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+
+        mockRegistry = Mockito.mock(MetricRegistry.class);
+        context.getRegistry().bind(METRIC_REGISTRY_NAME, mockRegistry);
+
+        mockCounter = Mockito.mock(Counter.class);
+        inOrder = Mockito.inOrder(mockRegistry, mockCounter);
+
+        return context;
+    }
+
+    @Override
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:in")
+                        .to("metrics:counter:A?increment=512")
+                        .to("mock:out");
+            }
+        };
     }
 
     @Test
     public void testMetricsRegistryFromCamelRegistry() throws Exception {
-        // TODO - 12.05.2014, Lauri - is there any better way to set this up?
-        MetricRegistry mockRegistry = endpoint.getCamelContext().getRegistry()
-                .lookupByNameAndType(MetricsComponent.METRIC_REGISTRY_NAME, MetricRegistry.class);
-        Counter mockCounter = Mockito.mock(Counter.class);
-        InOrder inOrder = Mockito.inOrder(mockRegistry, mockCounter);
         when(mockRegistry.counter("A")).thenReturn(mockCounter);
 
         endpoint.expectedMessageCount(1);
diff --git a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/TimerRouteTest.java b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/TimerRouteTest.java
index e4a24ee..ca78e35 100644
--- a/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/TimerRouteTest.java
+++ b/components/camel-metrics/src/test/java/org/apache/camel/component/metrics/TimerRouteTest.java
@@ -18,22 +18,21 @@ package org.apache.camel.component.metrics;
 
 import com.codahale.metrics.MetricRegistry;
 import com.codahale.metrics.Timer;
+import org.apache.camel.CamelContext;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
-import org.apache.camel.test.spring.junit5.MockEndpoints;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
 import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.InOrder;
 import org.mockito.Mockito;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.test.context.ContextConfiguration;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.support.AbstractApplicationContext;
 
 import static org.apache.camel.component.metrics.MetricsComponent.METRIC_REGISTRY_NAME;
 import static org.apache.camel.component.metrics.MetricsConstants.HEADER_METRIC_NAME;
@@ -43,10 +42,7 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
 @CamelSpringTest
-@ContextConfiguration(
-                      classes = { TimerRouteTest.TestConfig.class })
-@MockEndpoints
-public class TimerRouteTest {
+public class TimerRouteTest extends CamelSpringTestSupport {
 
     @EndpointInject("mock:out")
     private MockEndpoint endpoint;
@@ -63,39 +59,37 @@ public class TimerRouteTest {
 
     private InOrder inOrder;
 
-    @Configuration
-    public static class TestConfig extends SingleRouteCamelConfiguration {
-
-        @Bean
-        @Override
-        public RouteBuilder route() {
-            return new RouteBuilder() {
-
-                @Override
-                public void configure() throws Exception {
-                    from("direct:in-1")
-                            .to("metrics:timer:A?action=start")
-                            .to("mock:out");
-
-                    from("direct:in-2")
-                            .to("metrics:timer:A")
-                            .to("mock:out");
-                }
-            };
-        }
-
-        @Bean(name = METRIC_REGISTRY_NAME)
-        public MetricRegistry getMetricRegistry() {
-            return Mockito.mock(MetricRegistry.class);
-        }
+    @Override
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:in-1")
+                        .to("metrics:timer:A?action=start")
+                        .to("mock:out");
+
+                from("direct:in-2")
+                        .to("metrics:timer:A")
+                        .to("mock:out");
+            }
+        };
     }
 
-    @BeforeEach
-    public void setup() {
-        // TODO - 12.05.2014, Lauri - is there any better way to set this up?
-        mockRegistry = endpoint.getCamelContext().getRegistry().lookupByNameAndType(METRIC_REGISTRY_NAME, MetricRegistry.class);
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new AnnotationConfigApplicationContext();
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext context = super.createCamelContext();
+
+        mockRegistry = Mockito.mock(MetricRegistry.class);
+        context.getRegistry().bind(METRIC_REGISTRY_NAME, mockRegistry);
         mockTimer = Mockito.mock(Timer.class);
         inOrder = Mockito.inOrder(mockRegistry, mockTimer);
+
+        return context;
     }
 
     @AfterEach
diff --git a/components/camel-micrometer/pom.xml b/components/camel-micrometer/pom.xml
index b3d5742..1b5546c 100644
--- a/components/camel-micrometer/pom.xml
+++ b/components/camel-micrometer/pom.xml
@@ -31,9 +31,6 @@
     <name>Camel :: Micrometer</name>
     <description>Camel Micrometer based monitoring component</description>
 
-    <properties>
-    </properties>
-
     <dependencies>
 
         <dependency>
@@ -74,11 +71,6 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-spring-javaconfig</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
             <artifactId>camel-test-spring-junit5</artifactId>
             <scope>test</scope>
         </dependency>
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterRouteTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterRouteTest.java
index 90c6780..e52a8c9 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterRouteTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/CounterRouteTest.java
@@ -19,20 +19,19 @@ package org.apache.camel.component.micrometer;
 import io.micrometer.core.instrument.Counter;
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
+import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
-import org.apache.camel.test.spring.junit5.MockEndpoints;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
 import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.test.context.ContextConfiguration;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.support.AbstractApplicationContext;
 
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_COUNTER_DECREMENT;
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_COUNTER_INCREMENT;
@@ -41,10 +40,7 @@ import static org.apache.camel.component.micrometer.MicrometerConstants.METRICS_
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @CamelSpringTest
-@ContextConfiguration(
-                      classes = { CounterRouteTest.TestConfig.class })
-@MockEndpoints
-public class CounterRouteTest {
+public class CounterRouteTest extends CamelSpringTestSupport {
 
     @EndpointInject("mock:out")
     private MockEndpoint endpoint;
@@ -61,47 +57,37 @@ public class CounterRouteTest {
     @Produce("direct:in-4")
     private ProducerTemplate producer4;
 
-    private MeterRegistry registry;
-
-    @Configuration
-    public static class TestConfig extends SingleRouteCamelConfiguration {
-
-        @Bean
-        @Override
-        public RouteBuilder route() {
-            return new RouteBuilder() {
-
-                @Override
-                public void configure() {
-                    from("direct:in-1")
-                            .to("micrometer:counter:A?increment=5")
-                            .to("mock:out");
-
-                    from("direct:in-2")
-                            .to("micrometer:counter:B?decrement=9")
-                            .to("mock:out");
-
-                    from("direct:in-3")
-                            .setHeader(HEADER_COUNTER_INCREMENT, constant(417L))
-                            .to("micrometer:counter:C")
-                            .to("mock:out");
-
-                    from("direct:in-4")
-                            .to("micrometer:counter:D?increment=${body.length}&tags=a=${body.length}")
-                            .to("mock:out");
-                }
-            };
-        }
-
-        @Bean(name = METRICS_REGISTRY_NAME)
-        public MeterRegistry getMetricRegistry() {
-            return new SimpleMeterRegistry();
-        }
+    @BindToRegistry(METRICS_REGISTRY_NAME)
+    private MeterRegistry registry = new SimpleMeterRegistry();
+
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new AnnotationConfigApplicationContext();
     }
 
-    @BeforeEach
-    public void setup() {
-        registry = endpoint.getCamelContext().getRegistry().lookupByNameAndType(METRICS_REGISTRY_NAME, MeterRegistry.class);
+    @Override
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:in-1")
+                        .to("micrometer:counter:A?increment=5")
+                        .to("mock:out");
+
+                from("direct:in-2")
+                        .to("micrometer:counter:B?decrement=9")
+                        .to("mock:out");
+
+                from("direct:in-3")
+                        .setHeader(HEADER_COUNTER_INCREMENT, constant(417L))
+                        .to("micrometer:counter:C")
+                        .to("mock:out");
+
+                from("direct:in-4")
+                        .to("micrometer:counter:D?increment=${body.length}&tags=a=${body.length}")
+                        .to("mock:out");
+            }
+        };
     }
 
     @AfterEach
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryRouteTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryRouteTest.java
index 1a7b630..07360c7 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryRouteTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/DistributionSummaryRouteTest.java
@@ -20,20 +20,19 @@ import io.micrometer.core.instrument.DistributionSummary;
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.distribution.HistogramSnapshot;
 import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
+import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
-import org.apache.camel.test.spring.junit5.MockEndpoints;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
 import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.test.context.ContextConfiguration;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.support.AbstractApplicationContext;
 
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_HISTOGRAM_VALUE;
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_METRIC_NAME;
@@ -41,10 +40,7 @@ import static org.apache.camel.component.micrometer.MicrometerConstants.METRICS_
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @CamelSpringTest
-@ContextConfiguration(
-                      classes = { DistributionSummaryRouteTest.TestConfig.class })
-@MockEndpoints
-public class DistributionSummaryRouteTest {
+public class DistributionSummaryRouteTest extends CamelSpringTestSupport {
 
     @EndpointInject("mock:out")
     private MockEndpoint endpoint;
@@ -55,37 +51,27 @@ public class DistributionSummaryRouteTest {
     @Produce("direct:in-2")
     private ProducerTemplate producer2;
 
-    private MeterRegistry registry;
+    @BindToRegistry(METRICS_REGISTRY_NAME)
+    private MeterRegistry registry = new SimpleMeterRegistry();
 
-    @Configuration
-    public static class TestConfig extends SingleRouteCamelConfiguration {
-
-        @Bean
-        @Override
-        public RouteBuilder route() {
-            return new RouteBuilder() {
-
-                @Override
-                public void configure() {
-                    from("direct:in-1")
-                            .to("micrometer:summary:A?value=332491")
-                            .to("mock:out");
-                    from("direct:in-2")
-                            .to("micrometer:summary:${body}?value=${header.nextValue}")
-                            .to("mock:out");
-                }
-            };
-        }
-
-        @Bean(name = METRICS_REGISTRY_NAME)
-        public MeterRegistry getMetricRegistry() {
-            return new SimpleMeterRegistry();
-        }
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new AnnotationConfigApplicationContext();
     }
 
-    @BeforeEach
-    public void setup() {
-        registry = endpoint.getCamelContext().getRegistry().lookupByNameAndType(METRICS_REGISTRY_NAME, MeterRegistry.class);
+    @Override
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:in-1")
+                        .to("micrometer:summary:A?value=332491")
+                        .to("mock:out");
+                from("direct:in-2")
+                        .to("micrometer:summary:${body}?value=${header.nextValue}")
+                        .to("mock:out");
+            }
+        };
     }
 
     @AfterEach
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MetricComponentSpringTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MetricComponentSpringTest.java
index 6358fc1..f40f15e 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MetricComponentSpringTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/MetricComponentSpringTest.java
@@ -18,31 +18,29 @@ package org.apache.camel.component.micrometer;
 
 import io.micrometer.core.instrument.Counter;
 import io.micrometer.core.instrument.MeterRegistry;
+import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
-import org.apache.camel.test.spring.junit5.MockEndpoints;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
 import org.junit.jupiter.api.Test;
 import org.mockito.InOrder;
 import org.mockito.Mockito;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.test.context.ContextConfiguration;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.support.AbstractApplicationContext;
 
+import static org.apache.camel.component.micrometer.MicrometerConstants.METRICS_REGISTRY_NAME;
 import static org.mockito.ArgumentMatchers.anyIterable;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 
 @CamelSpringTest
-@ContextConfiguration(
-                      classes = { MetricComponentSpringTest.TestConfig.class })
-@MockEndpoints
-public class MetricComponentSpringTest {
+public class MetricComponentSpringTest extends CamelSpringTestSupport {
 
     @EndpointInject("mock:out")
     private MockEndpoint endpoint;
@@ -50,27 +48,24 @@ public class MetricComponentSpringTest {
     @Produce("direct:in")
     private ProducerTemplate producer;
 
-    @Configuration
-    public static class TestConfig extends SingleRouteCamelConfiguration {
+    @BindToRegistry(METRICS_REGISTRY_NAME)
+    private MeterRegistry registry = Mockito.mock(MeterRegistry.class);
 
-        @Bean
-        @Override
-        public RouteBuilder route() {
-            return new RouteBuilder() {
-
-                @Override
-                public void configure() {
-                    from("direct:in")
-                            .to("micrometer:counter:A?increment=512")
-                            .to("mock:out");
-                }
-            };
-        }
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new AnnotationConfigApplicationContext();
+    }
 
-        @Bean(name = MicrometerConstants.METRICS_REGISTRY_NAME)
-        public MeterRegistry getMetricRegistry() {
-            return Mockito.mock(MeterRegistry.class);
-        }
+    @Override
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:in")
+                        .to("micrometer:counter:A?increment=512")
+                        .to("mock:out");
+            }
+        };
     }
 
     @Test
diff --git a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java
index 5ca7a4f..ab6ed82 100644
--- a/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java
+++ b/components/camel-micrometer/src/test/java/org/apache/camel/component/micrometer/TimerRouteTest.java
@@ -21,20 +21,19 @@ import java.util.concurrent.TimeUnit;
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.Timer;
 import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
+import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
 import org.apache.camel.test.spring.junit5.CamelSpringTest;
-import org.apache.camel.test.spring.junit5.MockEndpoints;
+import org.apache.camel.test.spring.junit5.CamelSpringTestSupport;
 import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.test.context.ContextConfiguration;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.support.AbstractApplicationContext;
 
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_METRIC_NAME;
 import static org.apache.camel.component.micrometer.MicrometerConstants.HEADER_TIMER_ACTION;
@@ -43,10 +42,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 @CamelSpringTest
-@ContextConfiguration(
-                      classes = { TimerRouteTest.TestConfig.class })
-@MockEndpoints
-public class TimerRouteTest {
+public class TimerRouteTest extends CamelSpringTestSupport {
 
     private static final long DELAY = 20L;
 
@@ -62,52 +58,42 @@ public class TimerRouteTest {
     @Produce("direct:in-3")
     private ProducerTemplate producer3;
 
-    private MeterRegistry registry;
-
-    @Configuration
-    public static class TestConfig extends SingleRouteCamelConfiguration {
-
-        @Bean
-        @Override
-        public RouteBuilder route() {
-            return new RouteBuilder() {
-
-                @Override
-                public void configure() {
-                    from("direct:in-1")
-                            .setHeader(HEADER_METRIC_NAME, constant("B"))
-                            .to("micrometer:timer:A?action=start")
-                            .delay(DELAY)
-                            .setHeader(HEADER_METRIC_NAME, constant("B"))
-                            .to("micrometer:timer:A?action=stop")
-                            .to("mock:out");
-
-                    from("direct:in-2")
-                            .setHeader(HEADER_TIMER_ACTION, constant(MicrometerTimerAction.start))
-                            .to("micrometer:timer:A")
-                            .delay(DELAY)
-                            .setHeader(HEADER_TIMER_ACTION, constant(MicrometerTimerAction.stop))
-                            .to("micrometer:timer:A")
-                            .to("mock:out");
-
-                    from("direct:in-3")
-                            .to("micrometer:timer:C?action=start")
-                            .delay(DELAY)
-                            .to("micrometer:timer:C?action=stop&tags=a=${body}")
-                            .to("mock:out");
-                }
-            };
-        }
-
-        @Bean(name = METRICS_REGISTRY_NAME)
-        public MeterRegistry getMetricRegistry() {
-            return new SimpleMeterRegistry();
-        }
+    @BindToRegistry(METRICS_REGISTRY_NAME)
+    private MeterRegistry registry = new SimpleMeterRegistry();
+
+    @Override
+    protected RoutesBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:in-1")
+                        .setHeader(HEADER_METRIC_NAME, constant("B"))
+                        .to("micrometer:timer:A?action=start")
+                        .delay(DELAY)
+                        .setHeader(HEADER_METRIC_NAME, constant("B"))
+                        .to("micrometer:timer:A?action=stop")
+                        .to("mock:out");
+
+                from("direct:in-2")
+                        .setHeader(HEADER_TIMER_ACTION, constant(MicrometerTimerAction.start))
+                        .to("micrometer:timer:A")
+                        .delay(DELAY)
+                        .setHeader(HEADER_TIMER_ACTION, constant(MicrometerTimerAction.stop))
+                        .to("micrometer:timer:A")
+                        .to("mock:out");
+
+                from("direct:in-3")
+                        .to("micrometer:timer:C?action=start")
+                        .delay(DELAY)
+                        .to("micrometer:timer:C?action=stop&tags=a=${body}")
+                        .to("mock:out");
+            }
+        };
     }
 
-    @BeforeEach
-    public void setup() {
-        registry = endpoint.getCamelContext().getRegistry().lookupByNameAndType(METRICS_REGISTRY_NAME, MeterRegistry.class);
+    @Override
+    protected AbstractApplicationContext createApplicationContext() {
+        return new AnnotationConfigApplicationContext();
     }
 
     @AfterEach
diff --git a/components/camel-spring-batch/pom.xml b/components/camel-spring-batch/pom.xml
index 5eb4a91..2a04a63 100644
--- a/components/camel-spring-batch/pom.xml
+++ b/components/camel-spring-batch/pom.xml
@@ -73,10 +73,5 @@
             <artifactId>camel-test-spring-junit5</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-spring-javaconfig</artifactId>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
 </project>
diff --git a/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchJobRegistryTest.java b/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchJobRegistryTest.java
deleted file mode 100644
index 523d9fa..0000000
--- a/components/camel-spring-batch/src/test/java/org/apache/camel/component/spring/batch/SpringBatchJobRegistryTest.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.spring.batch;
-
-import org.apache.camel.ConsumerTemplate;
-import org.apache.camel.EndpointInject;
-import org.apache.camel.ExchangePattern;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.component.spring.batch.support.CamelItemProcessor;
-import org.apache.camel.component.spring.batch.support.CamelItemReader;
-import org.apache.camel.component.spring.batch.support.CamelItemWriter;
-import org.apache.camel.component.spring.batch.support.CamelJobExecutionListener;
-import org.apache.camel.spring.javaconfig.SingleRouteCamelConfiguration;
-import org.apache.camel.test.spring.junit5.CamelSpringBootTest;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.batch.core.Job;
-import org.springframework.batch.core.JobExecutionListener;
-import org.springframework.batch.core.Step;
-import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
-import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
-import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
-import org.springframework.batch.core.configuration.support.ApplicationContextFactory;
-import org.springframework.batch.core.configuration.support.GenericApplicationContextFactory;
-import org.springframework.batch.item.ItemProcessor;
-import org.springframework.batch.item.ItemReader;
-import org.springframework.batch.item.ItemWriter;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-import org.springframework.test.annotation.DirtiesContext;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
-
-@CamelSpringBootTest
-@ContextConfiguration(classes = SpringBatchJobRegistryTest.ContextConfig.class)
-public class SpringBatchJobRegistryTest extends AbstractJUnit4SpringContextTests {
-
-    @EndpointInject("mock:output")
-    MockEndpoint outputEndpoint;
-
-    @EndpointInject("mock:jobExecutionEventsQueue")
-    MockEndpoint jobExecutionEventsQueueEndpoint;
-
-    @Autowired
-    ProducerTemplate template;
-
-    @Autowired
-    ConsumerTemplate consumer;
-
-    String[] inputMessages = new String[] { "foo", "bar", "baz", null };
-
-    @BeforeEach
-    public void setUp() throws Exception {
-
-        for (String message : inputMessages) {
-            template.sendBody("seda:inputQueue", message);
-        }
-    }
-
-    @DirtiesContext
-    @Test
-    public void testJobRegistry() throws InterruptedException {
-        outputEndpoint.expectedBodiesReceived("Echo foo", "Echo bar", "Echo baz");
-
-        template.sendBody("direct:start", "Start batch!");
-
-        outputEndpoint.assertIsSatisfied();
-    }
-
-    @Configuration
-    @Import(value = BatchConfig.class)
-    public static class ContextConfig extends SingleRouteCamelConfiguration {
-        @Override
-        public RouteBuilder route() {
-            return new RouteBuilder() {
-                @Override
-                public void configure() {
-                    from("direct:start").to("spring-batch:echoJob?jobRegistry=#jobRegistry");
-                    from("direct:processor").setExchangePattern(ExchangePattern.InOut).setBody(simple("Echo ${body}"));
-                }
-            };
-        }
-    }
-
-    @EnableBatchProcessing(modular = true)
-    public static class BatchConfig {
-
-        @Bean
-        public ApplicationContextFactory testJobs() {
-            return new GenericApplicationContextFactory(ChildBatchConfig.class);
-        }
-    }
-
-    @Configuration
-    public static class ChildBatchConfig {
-
-        @Autowired
-        JobBuilderFactory jobs;
-
-        @Autowired
-        StepBuilderFactory steps;
-
-        @Autowired
-        ConsumerTemplate consumerTemplate;
-
-        @Autowired
-        ProducerTemplate producerTemplate;
-
-        @Bean
-        protected ItemReader<Object> reader() throws Exception {
-            return new CamelItemReader<>(consumerTemplate, "seda:inputQueue");
-        }
-
-        @Bean
-        protected ItemWriter<Object> writer() throws Exception {
-            return new CamelItemWriter<>(producerTemplate, "mock:output");
-        }
-
-        @Bean
-        protected ItemProcessor<Object, Object> processor() throws Exception {
-            return new CamelItemProcessor<>(producerTemplate, "direct:processor");
-        }
-
-        @Bean
-        protected JobExecutionListener jobExecutionListener() throws Exception {
-            return new CamelJobExecutionListener(producerTemplate, "mock:jobExecutionEventsQueue");
-        }
-
-        @Bean
-        public Job echoJob() throws Exception {
-            return this.jobs.get("echoJob").start(echoStep()).build();
-        }
-
-        @Bean
-        protected Step echoStep() throws Exception {
-            return this.steps.get("echoStep")
-                    .chunk(3)
-                    .reader(reader())
-                    .processor(processor())
-                    .writer(writer())
-                    .build();
-        }
-    }
-
-}