SpringBoot -- 自定义Starter (狂神视频学习笔记)

SpringBoot -- 自定义Starter (狂神视频学习笔记)

  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

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

    4. 点击apply即可,基本结构

    5. 在starter 中 导入 autoconfigure 的依赖

      <!-- 启动器 -->
      <dependencies>
          <!--  引入自动配置模块 -->
          <dependency>
              <groupId>com.demo</groupId>
              <artifactId>self-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

      # Auto Configure
      org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
      com.demo.config.HelloServiceAutoConfiguration
      
      
    11. 编写完成后,可以安装到maven仓库中

    1. 项目包结构

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

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

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

      <dependency>
      	<groupId>com.demo</groupId>
      	<artifactId>self-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("ywb");
          }
      
      }
      
      
    4. 编写配置文件 application.properties

      demo.hello.prefix="Mystarter-perfix--"
      demo.hello.suffix="--Mystarter-suffix"
      
      
    5. 启动项目进行测试,结果成功

posted @ 2021-09-29 19:08  杨文博CJ  阅读(66)  评论(0编辑  收藏  举报