SpringBoot:手写一个 SpringBoot Starter

这篇具有很好参考价值的文章主要介绍了SpringBoot:手写一个 SpringBoot Starter。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 声明:原文作者:yuan_404

1. 说明

  • 启动器模块是一个 空 jar 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库

命名归约:

  • 官方命名:

    • 前缀:spring-boot-starter-xxx
    • 比如:spring-boot-starter-web…
  • 自定义命名:

    • xxx-spring-boot-starter
    • 比如:mybatis-spring-boot-starter

2 . 编写启动器

  1. 在IDEA中新建一个空项目 spring-boot-starter-diy

  2. 新建一个普通Maven模块:demo-spring-boot-starter
    SpringBoot:手写一个 SpringBoot Starter

  3. 新建一个Springboot模块:demo-spring-boot-starter-autoconfigure
    SpringBoot:手写一个 SpringBoot Starter

  4. 点击apply即可,基本结构
    SpringBoot:手写一个 SpringBoot Starter

  5. 在starter 中 导入 autoconfigure 的依赖

    <!-- 启动器 -->
    <dependencies>
        <!--  引入自动配置模块 -->
        <dependency>
            <groupId>com.demo</groupId>
            <artifactId>demo-spring-boot-starter-autoconfigure</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
    
    
  6. 将 autoconfigure 项目下,Pom中加入依赖

     <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
    </dependencies>
    
    

    说明:
    第一个依赖 主要是为编译器配置的 可以根据properties 鼠标右键 点到用这个属性的类上个

    第二个依赖 主要是为了自动装配

  7. 编写HelloProperties 配置类

    // 前缀 demo.hello
    @ConfigurationProperties(prefix = "demo.hello")
    public class HelloProperties {
    
        private String prefix;
        private String suffix;
    
        public String getPrefix() {
            return prefix;
        }
    
        public void setPrefix(String prefix) {
            this.prefix = prefix;
        }
    
        public String getSuffix() {
            return suffix;
        }
    
        public void setSuffix(String suffix) {
            this.suffix = suffix;
        }
    }
    
    

    这里我们要读取的配置就是demo.hello.prefix 和 demo.hello.suffix 的值

    @ConfigurationProperties注解的作用就是读取配置文件指定属性的值

  8. 编写一个自己的服务

    public class HelloService {
        HelloProperties helloProperties;
    
        public HelloProperties getHelloProperties() {
            return helloProperties;
        }
    
        public void setHelloProperties(HelloProperties helloProperties) {
            this.helloProperties = helloProperties;
        }
    
        public String sayHello(String name){
            return helloProperties.getPrefix() + name + helloProperties.getSuffix();
        }
    }
    
    
    
  9. 编写自动配置类并注入bean,测试

    @Configuration
    @ConditionalOnWebApplication //web应用生效
    @EnableConfigurationProperties(HelloProperties.class)
    public class HelloServiceAutoConfiguration {
        @Autowired
        HelloProperties helloProperties;
    
        @Bean
        public HelloService helloService(){
            HelloService service = new HelloService();
            service.setHelloProperties(helloProperties);
            return service;
        }
    }
    
    
    

    说明:

    • @Configuration
      标识本类是配置类(相当于spring中application.xml)

    • @EnableConfigurationProperties(HelloProperties.class)
      如果 HelloProperties 中有注解@ConfigurationProperties 那么这个类就
      会被加到spring上下文的容器中,也就是可以通过@Autowire来注入

    • @ConditionalOnClass
      当类路径下有指定类的情况下 才进行下一步

    • @ConditionalOnMissingBean
      当spring容器中没有这个Bean的时候才进行下一步

  10. 在resources编写一个自己的 META-INF\spring.factories

```java
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.demo.config.HelloServiceAutoConfiguration

```
  1. 编写完成后,可以安装到maven仓库中
    SpringBoot:手写一个 SpringBoot Starter

  2. 项目包结构
    SpringBoot:手写一个 SpringBoot Starter

3 . 新建项目测试自己写的启动器

  1. 新建一个SpringBoot 项目(需要引入 web 的启动器)

  2. 导入我们自己写的启动器

    <dependency>
    	<groupId>com.demo</groupId>
    	<artifactId>demo-spring-boot-starter</artifactId>
    	<version>1.0-SNAPSHOT</version>
    </dependency>
    
    
  3. 编写一个 HelloController 进行测试我们自己的写的接口

    @RestController
    public class HelloController {
    
        @Autowired
        HelloService helloService;
    
        @RequestMapping("/hello")
        public String hello(){
            return helloService.sayHello("zxc");
        }
    
    }
    
    
  4. 编写配置文件 application.properties

    demo.hello.prefix="Mystarter-perfix--"
    demo.hello.suffix="--Mystarter-suffix"
    
    
  5. 启动项目进行测试,结果成功
    SpringBoot:手写一个 SpringBoot Starter文章来源地址https://www.toymoban.com/news/detail-435263.html

到了这里,关于SpringBoot:手写一个 SpringBoot Starter的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot(十)SpringBoot自定义starter

        一个月的时间,转眼已经到了我的SpringBoot系列的第十篇文章。还记得我的第二篇文章SpringBoot(二)starter介绍_springboot的starter_heart荼毒的博客-CSDN博客 曾经介绍过starter。starter除了官方提供的以外,我们也可以自定义。本篇,就介绍下如何自定义一个工具类的starter。  

    2024年02月14日
    浏览(32)
  • SpringBoot自定义starter

    参考文章:SpringBoot自定义starter_springboot3.0自定义starter_kksilu的博客-CSDN博客 我这里是根据上面博主的文章做的练习   DemoService: DemoConfig: Spring.factories: 安装到maven仓库 在application.properties中添加配置: 启动类测试: 最后就可以看到,控制台输出    DemoService{demo=\\\'123\\\'}    了

    2024年02月12日
    浏览(43)
  • SpringBoot之自定义starter

    目录 一、什么是SpringBoot starter机制 二、为什么要自定义starter 三、什么时候需要创建自定义starter 四、自动加载核心注解说明 五、自定义starter的开发流程 案例一:为短信发送功能创建一个starter 案例二:AOP方式统一服务日志 SpringBoot中的starter是一种非常重要的机制(自动化配

    2024年02月01日
    浏览(42)
  • SpringBoot中自定义starter

    一、在线创建 首先打开 https://start.spring.io 这个网站,如下: 项目构建工具是 Maven 还是 Gradle ?有人用 Gradle 做 Java 后端项目,但是整体感觉 Gradle 在 Java 后端中使用的还是比较少,Gradle 在 Android 中使用较多,Java 后端,目前来看还是 Maven 为主,因此这里选择第一项。 开发语

    2024年02月10日
    浏览(47)
  • 如何理解SpringBoot的Starter

    Starter是SpringBoot的四大核心功能特性之一 ,除此之外,SpringBoot还有自动装配,Actuator监控等特性 SpringBoot里面的这些特性,都是为了让开发者在开发基于Spring生态下的企业级应用时,只需要关系业务逻辑,减少对配置和外部环境的依赖 Starter是启动依赖,它的主要作用有几个:

    2024年02月09日
    浏览(37)
  • SpringBoot Starter 作用及原理

    本文会以 mybatis 为例,通过对比 mybatis-spring 和 mybatis-spring-boot-starter 代码示例,了解 Starter 的作用。并对 mybatis-spring-boot-starter 进行简单剖析,了解 Starter 原理。 下面还有投票,一起参与进来吧👍 有没有在入行后直接基于 SpringBoot 开发项目,没有 spring、servlet 开发经历的,

    2023年04月20日
    浏览(30)
  • 如何自己实现一个Spring Boot Starter

    现在很多开源的组件都会提供对应的 springboot-starter 包给我们去用,要做一个 starter 包并不难。参照Spring内置的实现就好了: 1、在工程里引入 starter 打包相关的依赖。 2、在我们工程内建 spring.factories 文件,编写我们配置类的全限类名。 使用AOP实现拦截方法执行和打印日志的

    2024年01月22日
    浏览(48)
  • SpringBoot进阶教程(七十九)spring-boot-starter- 有哪些 starter类型

    spring Boot应用启动器基本的一共有44种,具体如下 参考文献:https://www.javatpoint.com/spring-boot-starters

    2024年02月05日
    浏览(55)
  • SpringBoot-Starter 自动锁组件

    在日常业务开发的过程中,我们经常会遇到存在高并发的场景,这个时候都会选择使用 redis 来实现一个锁,来防止并发。 但是很多时候,我们可能业务完成后,就需要把锁释放掉,给下一个线程用,但是如果我们忘记了释放锁,可能就会存在死锁的问题。(对于使用锁不太

    2024年01月18日
    浏览(37)
  • 【SpringBoot】Starter的使用与案例讲解

    🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《SpringBoot》。🎯🎯 👉点击这里,就可以查看我的主页啦!👇👇 Java方文山的个人主页 🎁如果感觉还不错的话请给我点赞吧!🎁🎁 💖期待你的加入,一起学

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包