SpringBoot自定义starter

文章目录

  • 认识starter
  • springboot自动装配原理
  • 自定义starter

认识starter

为什么需要starter ?
传统的 Spring 项目想要运行,不仅需要导入各种依赖,还要对各种 XML 配置文件进行配置,十分繁琐,但 Spring Boot 项目在创建完成后,即使不编写任何代码,不进行任何配置也能够直接运行,这都要归功于 Spring Boot 的 starter 机制。

starter 的工作原理:
Spring Boot 将日常企业应用研发中的各种场景都抽取出来,做成一个个的 starter(启动器),starter 中整合了该场景下各种可能用到的依赖,用户只需要在 Maven 中引入 starter 依赖,SpringBoot 就能自动扫描到要加载的信息并启动相应的默认配置。starter 提供了大量的自动配置,让用户摆脱了处理各种依赖和配置的困扰。所有这些 starter 都遵循着约定成俗的默认配置,即遵循“约定大于配置”的原则。并允许用户调整这些配置,

举例理解:
以 spring-boot-starter-web 为例,它能够为提供 Web 开发场景所需要的几乎所有依赖,因此在使用 Spring Boot 开发 Web 项目时,只需要引入该 Starter 即可,而不需要额外导入 Web 服务器和其他的 Web 依赖。

并不是所有的 starter 都是由 Spring Boot 官方提供的,也有部分 starter 是第三方技术厂商提供的,例如 druid-spring-boot-starter 和 mybatis-spring-boot-starter 等等。当然也存在个别第三方技术,Spring Boot 官方没提供 starter,第三方技术厂商也没有提供 starter。

springboot自动装配原理

想要自定义starter,首先要了解springboot是如何加载starter的,也就是springboot的自动装配原理

自动装配,简单来说就是自动把第三方组件的Bean装载到Spring IOC容器里面,不需要开发人员再去写Bean的装配配置。在我看来,SpringBoot是约定大于配置这一理念下的产物,它的出现,让开发人员更加聚焦在了业务代码的编写上,而不需要去关心和业务无关的配置。

实际实现很简单,只需要在启动类加上@SpringBootApplication注解就可以实现自动装配。

具体的加载原理如下:
SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,并将其中对应的 org.springframework.boot.autoconfigure. 包下的配置项,通过反射实例化为对应标注了 @Configuration的JavaConfig形式的IOC容器配置类 , 然后将这些都汇总成为一个实例并加载到IOC容器中。 自动配置类就生效了, 帮我们进行自动配置工作;

下面是流程截屏:
SpringBoot自定义starter_第1张图片
SpringBoot自定义starter_第2张图片

SpringBoot自定义starter_第3张图片

自定义starter

通过上面我们知道,springboot加载starter原理其实就是加载依赖jar包下的spring.factories文件

所以我们要自定义starter,就需要在项目中建立一个META-INF的文件夹,然后在文件夹下面建一个spring.factories文件,文件里将你需要提供出去的bean实例信息配置好就行

步骤:
1、新建springboot项目,并添加 POM 依赖
2、项目构建完成后,在resources文件夹下面新建META-INF文件夹,并新建spring.factories文件。
因为我们是作为提供服务模块,所以不需要启动类,删除启动类并新建服务提供和统一配置两个类

统一配置类:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DemoConfig {

    @Value("${demo}")
    private String demo;

    @Bean
    public DemoService demoService(){
        return new DemoService(demo);
    }
}


服务提供类:

public class DemoService {


    private String demo;

    public DemoService(String demo) {
        this.demo = demo;
    }

    public String getService(){
        return demo;
    }
}


新建好后,在spring.factories文件里,将上面的统一配置类DemoConfig配置到文件里

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.yxj.demostarter.DemoConfig

3、构建starter
配置完后就可以开始maven install安装到maven仓库中了

mvn clean install -Dmaven.test.skip=true

安装好后,就会在你的本地maven仓库出现一个jar包,之后其他的项目就可以从这个本地maven仓库里获取依赖了。

你可能感兴趣的:(服务器研发,spring,boot,java)