Spring Boot3自定义starter

时间:2024-11-16 07:17:33

1、加入必要依赖

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.6'
    id 'io.spring.dependency-management' version '1.1.5'
}
group 'org.example.test.starter'
version '1.1.0'

jar{
    enabled=true
   //  resolveMainClassName
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

repositories {
    maven { url 'https://maven.aliyun.com/repository/public/' }
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.springframework.boot:spring-boot-configuration-processor'
}

2、定义Properties及业务service

@ConfigurationProperties(prefix = "test")
public class TestProperties {

    private List<String>  dataList;

    private Map<String,String>  dataMap;

    public List<String> getDataList() {
        return dataList;
    }

    public void setDataList(List<String> dataList) {
        this.dataList = dataList;
    }

    public Map<String, String> getDataMap() {
        return dataMap;
    }

    public void setDataMap(Map<String, String> dataMap) {
        this.dataMap = dataMap;
    }
}
public class TestConfigurationService {

    private List<String>  list;

    public void showList(){
        list.forEach(System.out::println);
    }

    public void setList(List<String> list) {
        this.list = list;
    }
}
public class TestConfigurationService {

    private List<String>  list;

    public void showList(){
        list.forEach(System.out::println);
    }

    public void setList(List<String> list) {
        this.list = list;
    }
}
@Component
public class TestImportService {

    @Resource
    private TestProperties testProperties;

    public void  showMap(){
        Map<String, String> dataMap = testProperties.getDataMap();
        if(!CollectionUtils.isEmpty(dataMap)){
            Set<String> keySet = dataMap.keySet();
            keySet.forEach(key-> System.out.println("key="+key+"--value="+dataMap.get(key)));
        }
    }

}

3、自动配置类

@EnableConfigurationProperties({TestProperties.class})
@Import({TestImportService.class})
@Configuration
public class TestStarterAutoConfiguration {

    @Bean
    public TestConfigurationService testConfigurationService(TestProperties testProperties){
        TestConfigurationService testConfigurationService = new TestConfigurationService();
        testConfigurationService.setList(testProperties.getDataList());
        return testConfigurationService;
    }

}

         配置自动导入类,在resource创建META-INF/spring目录,在目录下创建org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,写入TestStarterAutoConfiguration 全路径

4、调用测试

test:
  data-list:
    - Java
    - C/C++
    - C#
    - Vue
  data-map:
    name: LiuPing
    age: 30
    address: HeNanXinXian

@Service
public class TestService {

    @Autowired
    private TestConfigurationService testConfigurationService;

    @Autowired
    private TestImportService  testImportService;

    public void  test(){
        testConfigurationService.showList();
        testImportService.showMap();
    }