springboot自定义starter

springboot中starter是一种非常重要的机制,原理是基于SpringBoot自动装配原理。能够免去复杂的配置,将其集成到starter,应用者只需要在maven引入starter依赖(pom.xml),springboot就可以自动扫描到要加载的信息并启动默认配置。springboot会自动通过classthpath路径下的类发现需要的bean并注册到IOC容器。并且springboot已经提供了日常企业开发中各种场景的spring-boot-starter依赖模块。

  • 实现自定义starter(其实就是一个web项目),然后再另一个项目中引入我们自定义的starter并使用。

这里需要说明的是,我们在本地自己测试调用starter的话,在一个工程下可以直接用pom.xml导入自己写的starter依赖。如果我们把starter 发布到远程服务端,就是别人通过 Maven 指定坐标就能从远程引用,不是导入jar包之类的。具体做法可以参考:SpringBoot 将自制的Starter 发布到远程公服 - 梅花GG - 博客园

1、新建maven jar工程,zdy-spring-boot-starter,导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.lagou</groupId>
    <artifactId>zdy-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>2.5.0</version>
        </dependency>

    </dependencies>

</project>
  • 需要在自定义的starter中引入spring-boot-sutoconfigure依赖,用于自动装配

2、编写javaBean

package com.lagou.pojo;
//通用的bean对象

/*
@ConfigurationProperties:自动注入的注解,把properties配置文件转化为bean来使用的。
@EnableConfigurationProperties:使@ConfigurationProperties注解生效
如果只配置@ConfigurationProperties注解,在IOC容器中是获取不到properties配置文件转化的bean的
*/


@EnableConfigurationProperties(SimpleBean.class)
@ConfigurationProperties(prefix = "simplebean")
public class SimpleBean {

    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3、自动配置类,主要作用就是执行@Bean标记的方法。

package com.lagou.config;

//自动配置类,把simpleBean生成实例对象存到容器中
//@Configuration注解标识的类中声明了1个或者多个@Bean方法,Spring容器可以使用这些方法来注入Bean
@Configuration
public class MyAutoConfiguration {

    static {
        System.out.println("MyAutoConfiguration init...");
    }

    @Bean
    public SimpleBean simpleBean(){
        return new SimpleBean();
    }
}
  • 那么springboot是如何加载MyAutoConfigureation的呢?通过把MyAutoConfigureation写进spring.factories文件中,从而springboot启动就能加载到simpleBean对象存到IOC容器中。

4、在resource下创建/META-INF/spring.factories,然后配置自己的自动配置类(key value形式,key是固定的EnableAutoConfiguration)。意思是SpringBoot启动的时候会去加载我们的SimpleBean到IOC容器,这其实是一种变形的SPI机制。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.lagou.config.MyAutoConfiguration
  • 也就是说springboot启动过程中会加载各个jar包下的spring.factories,根据EnableAutoConfiguration的值找到配置类全路径,完成工具类中对象的自动装配

 5、测试

在demo-spring-boot-starter工程中执行mvn clean install 一个自定义的starter新鲜出炉。

新建一个springboot模块

引入starter依赖

<dependency>
    <groupId>org.lagou</groupId>
    <artifactId>zdy-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

6、新建一个springboot模块,在测试类中测试调用simplebean

在application.properties中给simplebean对象赋值,用于测试

result:

7、这里虽然有了测试结果,但我们查看springboot自动配置类相关源码时会发现都会加上@ConditionalMissingBean的注解,而我们这个自动配置类实际上是没有加的。不加的话springboot启动以后就会默认加载自动配置类的bean,假如我们不需要呢?这时除非我们手动去pom.xml把starter注释掉(做法很low)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值