Building a Custom Spring Boot Auto-Configuration Module

Defining the Service Interface and Implementation

Create a project with standard configure, service, and impl packages. First, define a core service interface for string processing.

// Text processing service contract
package com.example.textprocessor.service;

import java.util.Collection;

public interface TextTokenizer {
    Collection<String> tokenize(String inputText);
}

Implement the interface with a concrete class that handles comma-separated values.

// Default implementation for tokenization
package com.example.textprocessor.service.impl;

import com.example.textprocessor.service.TextTokenizer;
import org.springframework.util.StringUtils;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

public class DefaultTokenizer implements TextTokenizer {
    @Override
    public Collection<String> tokenize(String inputText) {
        if (!StringUtils.hasText(inputText)) {
            return List.of();
        }
        String[] tokens = StringUtils.split(inputText, ",");
        return Arrays.stream(tokens)
                     .collect(Collectors.toList());
    }
}

Creating the Auto-Configuration Class

Build a auto-configuration class that conditionally registers the service bean.

// Auto-configuration for text processing
package com.example.textprocessor.configure;

import com.example.textprocessor.service.TextTokenizer;
import com.example.textprocessor.service.impl.DefaultTokenizer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConditionalOnClass({TextTokenizer.class, DefaultTokenizer.class})
public class TokenizerAutoConfiguration {
    
    @Bean
    @ConditionalOnMissingBean
    public TextTokenizer textProcessor() {
        return new DefaultTokenizer();
    }
}

Configuring Spring Boot Auto-Discovery

Create a META-INF/spring.factories file to enable auto-configuration discovery.

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.textprocessor.configure.TokenizerAutoConfiguration

Building and Packaging the Module

Execute Maven to package the project:

mvn clean install -Dmaven.test.skip=true

If you encounter GBK encoding errors during compilation, configure UTF-8 encoding in your POM:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>8</source>
        <target>8</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

Integrating the Module in Another Application

Add the dependency to your application's POM file using the module's coordinates:

<dependency>
    <groupId>com.example.textprocessor</groupId>
    <artifactId>text-processor-spring-boot-starter</artifactId>
    <version>1.0.0</version>
</dependency>

After adding the dependency, rebuild the project. The TextTokenizer bean will be automatically available in the Spring application context wheen no other implementation is present.

Tags: Spring Boot auto-configuration custom starter conditional beans Spring factories

Posted on Fri, 22 May 2026 16:41:20 +0000 by JeremyMorgan