SpringBoot -自定义starter (启动器)

Springboot 思想

根据springboot 的思想,当我们需要某个功能的时候,我们可以导入相关的依赖,比如我们需要web的时候,我们导入spring-boot-starter-web 当我们需要整合 mybatis 的时候,我们导入
mybatis-spring-boot-starter 依赖, 然后springboot 就会为我们自动创建相关的组件,

  • 其中 spring-boot-starter-xxxx 是springboot自己整合的。
  • xxx-spring-boot-starter 是别去整合 spirngboot的

自定义starter

分析

我们来参考 mybatis-spring-boot-starter 可以写出我们自己的 starter ,
分析 mybatis-spring-boot-starter 可以得知

启动器只用来做依赖导入,没有任何代码
依赖的mybatis-spring-boot-autoconfigure 才是真正实现自动配置的

自定义思路:

  1. 我们可以先写一个 xxx-spring-boot-starter 工程 里面只有依赖,没有代码
  2. 我们写一个 xxx-spring-boot-autoconfigure 来实现我们真正的 自动配置

自定义 starter 我们需要了解以下内容

@Configuration  //指定这个类是一个配置类
@ConditionalOnXXX  //在指定条件成立的情况下自动配置类生效
@AutoConfigureAfter  //指定自动配置类的顺序
@Bean  //给容器中添加组件
@ConfigurationPropertie结合相关xxxProperties类来绑定相关的配置
@EnableConfigurationProperties //让xxxProperties生效加入到容器中
自动配置类要能加载
将需要启动就加载的自动配置类,配置在META‐INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\

自定义starte实现

期待功能

我来来实现一个自定义的starter ,只要在工程中引入我们自己的 starter ,就会往容器自动注入我们自己配置的类,而且可以在springboot的 yml配置文件中自动加载 我们所配置的内容

实现

  • 定义 fyj-spring-boot-starter 工程,该工程只有 pom依赖没有任何代码和配置
 <dependencies>
  	 <dependency>
         <groupId>com.yajun</groupId>
         <artifactId>fyj-spring-boot-autoconfigure</artifactId>
         <version>0.0.1-SNAPSHOT</version>
     </dependency>
 </dependencies>
  • 定义 fyj-spring-boot-autoconfigure 工程
    工程结构如下:
    在这里插入图片描述
    FyjAutoConfiguration 是配置类

    @Configuration
    @EnableConfigurationProperties({FyjProperties.class})
    public class FyjAutoConfiguration {
    
        @Autowired
        FyjProperties fyjProperties;
    
        @Bean
        public HelloService helloService(FyjProperties fyjProperties) {
            HelloService helloService = new HelloService();
            helloService.setFyjProperties(fyjProperties);
            return helloService;
        }
    }
    
    

    FyjProperties 是对应的属性注入类,它可以自动从yml配置文件中读取配置

    @ConfigurationProperties(prefix = "fyj")
    public class FyjProperties {
    
        private String pre;
            private String post;
    
        public String getPre() {
            return pre;
        }
    
        public void setPre(String pre) {
            this.pre = pre;
        }
    
        public String getPost() {
            return post;
        }
    
        public void setPost(String post) {
            this.post = post;
        }
    }
    
    

    功能类,

    public class HelloService {
    
        private FyjProperties fyjProperties;
    
    
        public String sayHelloFyj(String name) {
            return fyjProperties.getPre() + "->"+ name + "->" + fyjProperties.getPost();
        }
    
        public FyjProperties getFyjProperties() {
            return fyjProperties;
        }
    
        public void setFyjProperties(FyjProperties fyjProperties) {
            this.fyjProperties = fyjProperties;
        }
    }
    

    spring.factories文件,springboot 启动的时候会加载里面的 EnableAutoConfiguration对应的属性

    # Auto Configure
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    com.yajun.springboot.autoconfigure.FyjAutoConfiguration
    

    pom 依赖

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
        </dependencies>
    
  • 测试
    我们定义一个工程 pom 依赖导入我们自定义的 fyj-spring-boot-starter

    <dependency>
     	 <artifactId>fyj-spring-boot-starter</artifactId>
         <groupId>com.yajun</groupId>
         <version>0.0.1-SNAPSHOT</version>
     </dependency>
    

    yml 配置文件 配置属性

     
    fyj:
      pre: pre
      post: post
    

    测试类:

    @SpringBootTest
    class SpringbootMytatisApplicationTests {
    
        @Autowired
        private HelloService helloService;
    
        @Test
        void contextLoads() {
            String fangyajun = helloService.sayHelloFyj("你好");
            System.out.println(fangyajun);
        }
    
    }
    
    

    运行结果:
    在这里插入图片描述

从结果可以看出 ,我们可以自动注入 HelloService 这个我们自己定义的组件,而且 可以从yml配置文件中读取我们的配置,
已经完成了fyj-spring-boot-starter

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值