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. Catel(翻译)-为什么选择Catel
  2. boot loader能全部用C程序编写吗
  3. C# 实现ReadInt()直接输入数字的函数 含有检错功能
  4. c++中求解非线性方程组_齐次线性方程组的基础解系的简便算法
  5. 父子沪c转大牌过户_机动车异地过户(转籍)
  6. ceph iscsi安装
  7. smarty php5.5,smarty如何完美兼容php5.5和preg_replace_callback如何替换preg_r
  8. centos Apache、php、mysql默认安装路径
  9. Universal Link 用企业证书build包,可以通过链接拉起绑定的App(客户端)
  10. pythoncad_pythonCAD
  11. 基于SpringBoot超市库存管理系统+文档
  12. 安装和维护ImageJ
  13. Unity接入腾讯云
  14. 最新邮箱密码破解方法
  15. 什么是APS高级计划排程系统?APS计划排产有什么功能和作用?
  16. 离技术很近,离生活很远
  17. (线段判交的一些注意。。。)nyoj 1016-德莱联盟
  18. 股票买卖接口如何实现委托下单的功能?
  19. python购买股票_Python|买卖股票的最佳时机
  20. 户外风景拍摄自然风光摄影网站搭建模板

热门文章

  1. jquery制作拉开帷幕特效
  2. 【软件测试】你需要的面试技巧全在这里,细节满满
  3. 注意力机制——Non-local Networks(NLNet)
  4. onresize()调整浏览器窗口时,使图片等控件自适应地变化大小
  5. 公务员考试行测:资料分析,分数技巧
  6. 数学连乘和累加运算符号_看完这篇专栏,别再傻傻地写一大长串的加号和乘号了 #总和与连乘#...
  7. 【Proteus】16乘16点阵滚动播放
  8. MFC编程 -- 运行窗口居中显示
  9. JavaScript树形目录递归判断层数
  10. 2022年JDK8U321压缩版