前段时间看到松哥写的自定义starter文章,学有所得,所以总结一下。
SpringBoot starter机制
SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰。SpringBoot会自动通过classpath路径下的类发现需要的Bean,并注册进IOC容器。

为什么要自定义starter?
在工作中,可能会遇到一些独立于业务之外的配置模块,如果另一个项目复用这块功能的时候,我们可以把独立于业务代码之外的功配置模块封装成一个个starter,复用的时候只需要将其在pom中引用依赖即可,没必要再重新写那模块的代码。

自定义starter:
(1)新建maven项目,添加依赖

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

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

@ConfigurationProperties(prefix = "starter")
public class MyProperties {
    private static final String DEFAULT_NAME = "starter";
    private static final String DEFAULT_MSG = "create new starter ";
    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)配置完成MyProperties 后,接下来我们来定义一个 MyService ,然后定义一个简单的 say 方法, MyService 的定义如下:

public class MyService {
    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(MyProperties.class)
@ConditionalOnClass(MyService.class)
public class MyServiceAutoConfiguration {
    @Autowired
    MyProperties myProperties;

    @Bean
    MyService helloService() {
        MyService myService = new MyService();
        myService.setName(myProperties.getName());
        myService.setMsg(myProperties.getMsg());
        return myService;
    }
}
  • 首先 @Configuration 注解表明这是一个配置类
  • @EnableConfigurationProperties 注解是使我们之前配置的 @ConfigurationProperties 生效,让配置的属性成功的进入 Bean 中。
  • @ConditionalOnClass 表示当项目当前 classpath 下存在 MyService 时,后面的配置才生效。
    自动配置类中首先注入 MyProperties ,这个实例中含有我们在 application.properties 中配置的相关数据。
  • 提供一个 MyService 的实例,将 MyProperties 中的值注入进去。

我们要复用这个功能的时候只需要把它打包后的maven引入即可


版权声明:本文为qq_37606901原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_37606901/article/details/105908164