springBoot框架通过简化配置的方式实现spring应用的快速搭建;同时可以一定程度上解决包依赖冲突;提升开发效率的同时也减少系统搭建难度。

为了方便理解和自己编写一些starter,就需要熟悉starter的内部结构。

  • 依赖的包
   <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><!-- 禁止传递依赖 --><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>
  • 配置类
    不管是官方提供的starter还是自定义的starter,使用的时候都需要在配置文件中进行相关的配置,那么这些配置信息在starter中最终会映射到一个类中,因此我们需要首先定义这个类,需要使用到@ConfigurationProperties注解。其中最重要的一个属性是preffix,该值对应的是我们在配置文件中设置的配置信息的前缀,即需要通过此前缀来进行相关信息的配置,然后类中定义需要配置的属性,则前缀+属性名就是我们需要在使用starter项目配置文件中配置的信息了,本例定义如下:具体有关如何与yml、properties文件如何对应,请自行查看相应资料。
@Data
@ConfigurationProperties(prefix = "payne.mybatis-plus")
public class MybatisPlusProperties {private Boolean tenantMode = true;private Boolean sqlLog = true;private List<String> sqlLogExclude = new ArrayList();private Boolean optimizeJoin = false;/*** 分页最大数*/private Long pageLimit = 500L;/*** 溢出总页数后是否进行处理*/protected Boolean overflow = false;
}
  • 服务类
    服务类,也就是我们定义这个starter需要注入的bean。也就是最终被调用执行具体功能的类,该类和定义普通类没有任何差别。
public class PayneSqlInjector extends DefaultSqlInjector {@Overridepublic List<AbstractMethod> getMethodList(Class<?> mapperClass) {List<AbstractMethod> methodList = new ArrayList();methodList.add(new InsertIgnore());methodList.add(new Replace());methodList.add(new InsertBatchSomeColumn((i) -> {return i.getFieldFill() != FieldFill.UPDATE;}));methodList.addAll(super.getMethodList(mapperClass));return Collections.unmodifiableList(methodList);}
}
  • 服务注册
    通过bean configuration的方式来注册服务,因为需要使用到用户的配置信息所以需要通过@EnableConfigurationProperties注解来启用配置,并将配置类注入,这里是MyFirstConfigurationProperties,最后最终要的就是通过@Bean注解来注册服务类到容器中,这里就是FirstStarterService,最终代码如下:
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(MybatisPlusProperties.class)
public class MybatisPlusConfiguration implements WebMvcConfigurer {@Bean@ConditionalOnMissingBean({ISqlInjector.class})public ISqlInjector sqlInjector() {return new PayneSqlInjector();}}
  • 暴露服务
    在项目代码的resources目录下创建META-INF/spring.factories文件,并将创建的bean configuration类的全限定名定义在里面,示例这里是com.payne.auto.core.mp.config.MybatisPlusConfiguration,注意每个人不一样,记得更换为自己的。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.payne.auto.core.mp.config.MybatisPlusConfiguration

后续打包后就可以使用了。打包过程这些没有特别需要说明的。

自定义starter的常规组成分析相关推荐

  1. 【读官方文档,学原味技术】SpringBoot-Staters和自定义Starter

    spring-boot-reference 如果不想阅读英文原文,你可以直接读本文的[TS]标注参考翻译内容.由于本人水平有限,如有理解错误,烦请指正,互相交流. Lire les documents ...

  2. 自定义starter为什么要加上spring.factories

    文章目录 @SpringApplication注解的实现 自定义starter里面的类可以由这个注解扫描吗? 怎么样可以引入依赖jar包中在项目包外的类? 结论 自定义starter为什么要加上spr ...

  3. 002 第一季SpringBoot2核心技术-核心功能:配置文件、Web开发(原生组件)、数据访问、单元测试、指标监控、原理解析:@Value、命令行参数、手动获取bean、自定义starter

    三.核心技术之- ->核心功能 1. 配置文件 1.1 文件类型 1.1.1 properties 同以前的properties用法 优先级高于yml的方式. 1.1.2 yaml 1) 简介 ...

  4. R语言自定义变成进行决策曲线分析DCA曲线绘制(Decision Curve Analysis)

    R语言自定义变成进行决策曲线分析DCA曲线绘制(Decision Curve Analysis) 我们可能使用别的语言获得了机器学习模型以及对应的预测概率和标签,我们想直接使用这些信息进行DCA曲线的 ...

  5. SpringBoot自定义Starter(自动配置类)

    前言 SpringBoot其实从诞生以来围绕的核心就是快速构建项目,快速构建的前提是有人帮你做好轮子,开发者只要拿来即用就好了,而造好轮子的人就是SpringBoot的开发者,引入自动配置的形式帮助开 ...

  6. @configurationproperties注解的使用_徒手使用SpringBoot自定义Starter启动器

    前言 在使用SpringBoot框架时,SpringBoot 最强大的功能就是把我们常用的场景抽取封装成了一个个starter,将其称之为场景启动器.搭建项目时,通过引入SpringBoot为我提供的 ...

  7. Spring Boot : 自定义 Starter

    1.美图 2.概述 因为spring boot 已经自定义了很多starter,但是任然不能涵盖所有的开发场景,所以有时候就需要我们自己自定义starter. 自定义starter需要思考的问题 : ...

  8. 玩转 SpringBoot 2.x 之自定义Starter依赖

    前言 SpringBoot 核心功能之一就是 starter 依赖也叫起步依赖,他默认提供了 spring-boot-starter-web.spring-boot-starter-logging.s ...

  9. ❤️缓存集合(一级缓存、二级缓存、缓存原理以及自定义缓存—源码+图文分析,建议收藏) ❤️

    ❤️缓存集合(一级缓存.二级缓存.缓存原理以及自定义缓存-源码+图文分析,建议收藏) ❤️ 查询 : 连接数据库 ,耗资源!一次查询的结果,给他暂存在一个可以直接取到的地方!--> 内存 : 缓 ...

最新文章

  1. firefox html5 canvas,html5 Canvas
  2. pytorch 笔记:gather 函数
  3. Alibaba Nacos:搭建Nacos平台
  4. Winform中实现读取xml配置文件并动态配置DevExpress的RadioGroup的选项
  5. PHP+ExtJS 文件上传示例
  6. 15 Process State and O.S. Scheduling
  7. kubernetes英语怎么读_英语音标怎么读?如何从零基础英语音标入门英语口语学习...
  8. 安装百度库,C调用Python出错,卸载、再重装消失
  9. 联想教育应用使用说明(7.6版本号)——第4章 网络控制工具的使用
  10. 计算机考研408-2010
  11. 【知识地图】开发测试全栈 (未完待续)
  12. 「AI产品」产品小姐姐分析抖音背后的计算机视觉技术
  13. Android工程师进阶第五课 多线程锁,线程池和DVM/ART优化
  14. 黄一老师:什么是个人信用融资?
  15. 利用栈实现精制转换c++
  16. Failed to determine a suitable driver class
  17. uni-app真机调试链接不上网易im服务器
  18. 龙芯开源社区服务器迁移一览
  19. Flink SQL:Queries(Joins)
  20. 从一台 Windows 10 上共享文件夹到Docker中的Volume卷

热门文章

  1. 恭喜微微软喜当爹,Github嫁入豪门。
  2. 根据用户输入的账号和密码,确认是否成功登录?若正确,提示“恭喜您,登录成功!”;若错误,提示“账号或密码输入错误,请重新输入!”;若错误输入超过3次,则提示“今天输入已经超过3次
  3. chouti的布局 ,chouti的主页面,ContentFragment界面
  4. 移动端实时姿态识别算法
  5. DocuWare Workflow Manager(工作流管理器)
  6. 快速查看本机公网IP的几种方法
  7. 【简单又有趣】Python五个迷你小项目,即学即用,还不赶紧码住(附源码)
  8. MySQL必知必会思维导图
  9. 【游戏建模全流程】在Maya中制作失落城市场景
  10. 数据结构与算法——线性表的顺序储存结构