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.