自定义starter 案例

        昨天写了一个自定义starter的demo,晚上正好有时间,整理了一下,这里简单整理一下;

目录

1.创建一个maven 项目,项目结构如下;

2.在父项目中引入相关坐标;

3.创建mystarterdemo 子模块,代码结构如下;

 4. 这里主要代码是  MyStarterAutoConfiguration 类,这里面的 ConditionalOnBean 条件注解 可加可不加,如果加上就要在使用该启动类的地方 加上 EnableMyStarterConfiguration 注解;

5.其次就是 spring.factories 配置文件,用于配置要 注入 到 spring 容器 的配置类;

6. 再就是 spring-autoconfigure-metadata.properties 配置文件,用于排除一些不必要的配置类注入到 spring容器 中,节省对内存的占用;

7. use-mystarterdemo 模块的结构如下:

 8. 这里主要关注 一下 EnableMyStarterConfiguration 注解,是不是和Springcloud 和Dubbo 的某些注解有点像;

9.测试 在配置类中加入如下配置;


        在查看Springboot源码时,必然要翻看一下 spring.factories 配置文件,要想知道它的作用,就需要了解一个前提知识点:SPI(Service Provider Interface),有不了解的可以查看一下JDK SPI 和 Springboot SPI的相关知识;这里直接上 自定义starter 的核心代码;

1.创建一个maven 项目,项目结构如下;

2.在父项目中引入相关坐标;

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath></relativePath>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

3.创建mystarterdemo 子模块,代码结构如下;

 4. 这里主要代码是  MyStarterAutoConfiguration 类,这里面的 ConditionalOnBean 条件注解 可加可不加,如果加上就要在使用该启动类的地方 加上 EnableMyStarterConfiguration 注解;

@org.springframework.context.annotation.Configuration
@ConditionalOnBean(annotation = EnableMyStarterConfiguration.class)
@EnableConfigurationProperties(MyStarterProperties.class)
public class MyStarterAutoConfiguration {

    private MyStarterProperties myStarterProperties;

    public MyStarterProperties getMyStarterProperties() {
        return myStarterProperties;
    }

    public MyStarterAutoConfiguration(MyStarterProperties myStarterProperties){
        this.myStarterProperties =myStarterProperties;
    }

}

5.其次就是 spring.factories 配置文件,用于配置要 注入 spring 容器 的配置类;

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.demo.mystarter.autoconfigure.MyStarterAutoConfiguration

6. 再就是 spring-autoconfigure-metadata.properties 配置文件,用于排除一些不必要的配置类注入到 spring容器 中,节省对内存的占用

#com.demo.mystarter.autoconfigure.MyStarterAutoConfiguration.ConditionalOnClass=com.demo.mystarter.autoconfigure.EnableMyStarterConfiguration

7. use-mystarterdemo 模块的结构如下:

 8. 这里主要关注 一下 EnableMyStarterConfiguration 注解,是不是和Springcloud 和Dubbo 的某些注解有点像;

@EnableMyStarterConfiguration
@SpringBootApplication
@RestController
public class UserMyStarter {
    @Autowired
    private MyStarterAutoConfiguration myStarterAutoConfiguration;

    public static void main(String[] args) {
        SpringApplication.run(UserMyStarter.class, args);

    }
    @GetMapping("getConfig")
    public String getConfig(){
        MyStarterProperties myStarterProperties = myStarterAutoConfiguration.getMyStarterProperties();
        return "<h1>"+myStarterProperties+"</h1>";
    }
}

9.测试 在配置类中加入如下配置;

mystarter.id=10001
mystarter.name=xiaochen

测试结果:

总结:这个demo写的比较简单,但对 自定义Starter的思路表示清楚了,这里需要关注SPI相关知识,再者就是了解一下 @Import 注解 ,之前我也写过一个关注这个的博客,Springboot中@Import的使用原理_北尘-CSDN博客

但当时只写了其三种用法中的一种;感兴趣的可以看看。

最后 分享一下自定义starter 的源码:粉尘/starterDemo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值