SpringBoot 自定义starter

本文最后更新于2024.04.23-04:36,某些文章具有时效性,若有错误或已失效,请在下方留言或联系涛哥

前言

相信大家在工作中大家都会去封装一些公用代码,或者工具类

那我们其他项目如果需要这些是不是免不了的就是cv ,好像我们就是cv 来着,哈哈哈哈

我们会发现我们在开发SpringBoot 项目时 我们引入的上面 视频spring-boot-web  这种依赖

其实它内部封装了mvc、和tomcat等

还有就是大家 有没有看过 @SpringBootApplicatio 这个注解

我们会发现 会有一个 @EnableAutoConfiguration 这个注解 ,这个就是我们自动配置的核心

这个是如何使用,如何做到我们的yml配置自动读取而不需要我们手动去配置呢!!

接下来 用实际代码告诉大家

什么是starter?

starterSpringBoot中非常重要的一个机制,他是基于约定优于配置的思想所衍生出来的,摒弃了以前像Spring中需要使用一个依赖,需要添加非常多的配置,starter会在引入依赖时自动扫描需要加载的默认模块及配置,发现我们所定义的Bean并自动注册到IOC容器中。

项目结构

具体案例

1,首先我们需要创建一个SpringBoot项目

2,配置我们的pom文件 ,引入我们的核心依赖

 <!--  自动配置  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <!--  配置文件处理器,配置文件进行绑定就会有提示  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

3,编写 Configuration、Properties、Bean和service业务

Bean

@Data
@Builder
public class Tg {
    private String name;
    private String version;
}

Properties

@Data
@ConfigurationProperties(prefix = TgProperties.PREFIX)
public class TgProperties {

    public static final String PREFIX = "com.tg";

    private String name;

    private String version;

}

service

@Service
public abstract class TgService {
    public abstract void sayHello();
}

@Service
public class TgServiceImpl extends TgService {
    @Resource
    private Tg tg;

    @Override
    public void sayHello() {
        String message = "欢迎您呀!,见到你太高兴了!,遇见你是文档幸运";
        String[] args = message.split(",");
        for (String arg : args) {
            System.out.println(arg + "-------" + tg.getName() + "-------" + tg.getVersion() + "\n");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

自动配置类

@Configuration
@EnableConfigurationProperties(TgProperties.class)
public class TgAutoConfiguration {

    @Bean("tg")
    @ConditionalOnMissingBean
    public Tg tg(TgProperties tgProperties) {
        return Tg.builder()
                .name(tgProperties.getName())
                .version(tgProperties.getVersion())
                .build();
    }

    @Bean
    public TgService tgService() {
        return new TgServiceImpl();
    }
}

4,开启自动配置

在resources文件下创建META-INF/spring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration = \
  org.example.starter.config.TgAutoConfiguration

5,打包

6,在另外一个SpringBoot项目中使用

引入依赖

<dependency>
	<groupId>org.example</groupId>
	<artifactId>starter</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>

7,配置yml

com.tg.name= Tao Ge Ge
COM.tg.version= 1.0.0

8,创建测试类

@SpringBootTest
class TestDemo{

	@Autowired
	private TgService tgService;

	// 测试
	@Test
	public void test() {
		tgService.sayHello();
	}

}

9,测试效果

 结尾

到这里我们的自定义就完成了!!以后是不是再也不用 cv这个哪个工具类了!!

加油!!还在写代码的java程序员们。

阅读剩余
THE END