Loading

八、Spring Boot 实现一个自定义start

http://springboot.javaboy.org/2019/0520/springboot-starter

starter的作用

用来做依赖导入、自动配置

Starter 的核心就是条件注解 @Conditional

当 classpath 下存在某一个 Class 时,某个配置才会生效

实现:

1.新建一个maven项目添加Starter 的自动化配置类:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
    <version>2.1.4.RELEASE</version>
</dependency>

2.创建一个 HelloProperties 类,用来接受 application.properties 中注入的值

@ConfigurationProperties(prefix = "javaboy")
public class HelloProperties {
    private static final String DEFAULT_NAME = "江南一点雨";
    private static final String DEFAULT_MSG = "牧码小子";
    private String name = DEFAULT_NAME;
    private String msg = DEFAULT_MSG;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
}

3.新建一个service方法

public class HelloService {
    private String msg;
    private String name;
    public String sayHello() {
        return name + " say " + msg + " !";
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

4.定义自动化配置类

@Configuration //明这是一个配置类
@EnableConfigurationProperties(HelloProperties.class) // 使@ConfigurationProperties 生效
@ConditionalOnClass(HelloService.class) // 当项目当前 classpath 下存在 HelloService 时,后面的配置才生效
public class HelloServiceAutoConfiguration {
    @Autowired
    HelloProperties helloProperties;

    @Bean
    HelloService helloService() {
        HelloService helloService = new HelloService();
        helloService.setName(helloProperties.getName());
        helloService.setMsg(helloProperties.getMsg());
        return helloService;
    }
}
  1. 新增 spring.factories 文件
    在Maven 项目的 resources 目录下创建一个名为 META-INF 的文件夹,然后在文件夹中创建一个名为 spring.factories 的文件,文件内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.javaboy.mystarter.HelloServiceAutoConfiguration

添加 spring.factories 文件的原因:
从项目启动的加载过程分析,Spring Boot 项目的启动类都有一个 @SpringBootApplication 注解,这个注解是一个组合注解,其中的一个组合项就是 @EnableAutoConfiguration

@EnableAutoConfiguration 表示启用 Spring 应用程序上下文的自动配置,该注解会自动导入一个名为 AutoConfigurationImportSelector 的类,而这个类会去读取一个名为 spring.factories 的文件, spring.factories 中则定义需要加载的自动化配置类,
我们打开任意一个框架的 Starter ,都能看到它有一个 spring.factories 文件

posted @ 2022-09-05 18:32  半瓶牛奶🥛  阅读(306)  评论(0编辑  收藏  举报