springboot手写一个自己的starter源码
作者:laozhang 发布时间:2021-07-31 10:18:14
springboot的最强大的就是那些xxxAutoconfiguration,但是这些xxxAutoConfiguration又依赖那些starter,只有导入了这些场景启动器(starter),我们很多自动配置类才能有用,并且还会新增一些功能,这次就来一起写个简单的starter,来看看内部到底是什么原理!
脑中大概有个印象:我们要用一个场景(比如web),直接导入下图所示的依赖,但是在jar包里面去看这个,你会发现里面只有一些基本的配置文件,什么类都没有,就能够想到这个一类就类似一个公司前台的作用,通过这个公司前台,能够联系到公司内部。
提前准备:必须要有IDEA模块化创建项目的基本操作,其他的随意。
温馨提醒:对于会用模块的小伙伴,其实这里就是创建一个空项目,里面新建一个maven模块,一个springboot模块,springboot坐标丢到maven的pom里面,再删除一些多余的文件和依赖。
1.创建一个空的项目
然后就会跳出下图这个页面
上面相当于前台创建好了,下面开始创建真正的东西了,继续创建模块
两个模块创建好了之后,将这两个模块联系起来(废话,公司前台肯定要有和上级的的通话方式啊)
导入依赖之后就是这样的
下一步就是在xxxautoconfiguration模块,删除一些没用的东西和依赖,但是一定要保留一个最基本的starter
到这里,基本的准备工作已经完成(其实会用模块式的直接能跳到这里来)
记住:xxxstarter是前台,只是起到一个联系作用(所以我们基本不配置这个),没有什么其他功能,但是那个xxxautoconfiguration才是内部有实权的老板
现在我们来做个老板出来,嘿嘿嘿!
下面看我的目录结构
从头到尾看一下这些类里面有什么
第一个:HelloProperties
第二个:HelloWorld(记住,此时这个类和properties类还没什么关系,必须要让第三方传入properties)
第三个HelloWorldAutoconfiguration
第四个.spring.factories文件
最后一步:把这两个安装到maven本地仓库(记得,先是xxautoconfiguration,然后再starter)
另外一个starter一样的操作
到此为止,一个简单的HelloWorid的starter就做出来了,我们只需要在我们的项目中导入那个starter(也就是前台唯一的作用)的依赖,就可以了,看看我的starter的坐标(还要记住,properties文件配置的@ConfigurationProperties(prefix = "wyq.hello"),这个prefix是可以在我们项目里面配置文件配置属性的哦~~)
测试:
file------>new------->project,和以前用springboot一样,随便新建一个springboot应用(记住,一定要选择web模块,不然自动配置类作用,因为配置了@ConditionalOnWebApplication),导入上图的依赖
随便写个controller测试一下
测试成功
到此结束,是不是觉得starter也就这样啊,挺好玩的一个东西,而且最重要的是这种设计的模式有点厉害!通过这样的设计,居然能够实现自动配置,果然是学海无涯啊,要不断的学习别人前辈造就出来的成果,站在巨人的肩膀上学习,我们才能走得更远啊!


猜你喜欢
- 目录堆内存溢出原因:解决方案:栈内存溢出原因:解决方案:方法区和运行时常量池内存溢出原因:本机直接内存溢出原因:解决方案:元空间内存溢出原因
- Java基本类型与byte数组之间相互转换,刚刚写的package cn.teaey.utils;import java.nio.chars
- 我是因为构建多渠道包的时候有这个需求,平常工作多个渠道包频繁的打包,总会忘记versioncode提高一下,从而打包出来的apk无法覆盖原先
- 本文实例讲述了Android中AlertDialog显示简单和复杂列表的方法。分享给大家供大家参考,具体如下:AlertDialog 显示简
- 在自己应用的AndroidManifest.xml某个activity配置不同类型的intent-filter, 这里添加的是图片, 也可以
- class文件中的特殊字符串首先说明一下, 所谓的特殊字符串出现在class文件中的常量池中,本着循序渐进和减少跨度的原则, 首先把clas
- 之前我一直认为 Mybatis 框架下已经实现预编译机制,很多东西都封装好了,应该基本上不会再有 SQL 注入问题了。近期在渗透中发现,在实
- 废话不多说了,直接给大家贴代码了,具体代码如下所示:package wxapi.WxHelper; import java.io.Buffe
- 当setCanceledOnTouchOutside(true),点击阴影处,dialog dismiss时键盘不消失的问题。如图一开始觉得
- java文件打包jar运行有效步骤:1.cmd 到当前目录(默认包主类所在目录为例) set classpath = 默认包主类所在目录2.
- 前言:线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、
- 如果一个项目内有很多个界面,那么在layout下会有太多的activity***.xml文件,这个时候就需要使用文件夹对这些分别存放了。当然
- 1.线程状态(生命周期)一个线程在给定的时间点只能处于一种状态。线程可以有如下6 种状态:New (新创建):未启动的线程;Runnable
- 尽管在实际开发过程中,我们一般使用ORM框架来代替传统的JDBC,例如Hibernate或者iBatis,但JDBC是Java用来实现数据访
- 一、So的热升级尝试在Android代码中,加载so库是通过调用System.loadLibrary函数实现的。但和Android的许多特性
- Spring介绍:spring 使用基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。然而, Spring的用途不仅限于服务
- Bean Searcher 号称 任何复杂的查询都可以 一行代码搞定,但 Mybatis Plus 似乎也有类似的动态查询功能,它们有怎样的
- 使用jni进行opencv开发可以快速地将PC端的opencv代码移植到手机上,但是如何在android studio下进行配置,网上几乎找
- C#实现委托namespace Delegate{ delegate void DGSayiHi(string n
- DAO层测试难点可重复性,每次运行单元测试,得到的数据是重复的独立性,测试数据与实际数据相互独立数据库中脏数据预处理不能给数据库中数据带来变