springboot手写一个自己的starter源码
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也就这样啊,挺好玩的一个东西,而且最重要的是这种设计的模式有点厉害!通过这样的设计,居然能够实现自动配置,果然是学海无涯啊,要不断的学习别人前辈造就出来的成果,站在巨人的肩膀上学习,我们才能走得更远啊!
相关推荐
-
SpringBoot使用Graylog日志收集的实现示例
本文介绍SpringBoot如何使用Graylog日志收集. 1.Graylog介绍 Graylog是一个生产级别的日志收集系统,集成Mongo和Elasticsearch进行日志收集.其中Mongo用于存储Graylog的元数据信息和配置信息,ElasticSearch用于存储数据. 架构图如下: 生产环境配置图如下: 2.安装Graylog 在官方文档上推荐了很多种安装的方式,这里以docker-compose的方式为例,进行安装Graylog,mongo,elasticsearch. do
-
如何设置Spring Boot测试时的日志级别
1.概览 该教程中,我将向你展示:如何在测试时设置spring boot 日志级别.虽然我们可以在测试通过时忽略日志,但是如果需要诊断失败的测试,选择正确的日志级别是非常重要的. 2.日志级别的重要性 正确设置日志级别可以节省我们许多时间. 举例来说,如果测试在CI服务器上失败,但在开发服务器上时却通过了.我们将无法诊断失败的测试,除非有足够的日志输出. 为了获取正确数量的详细信息,我们可以微调应用程序的日志级别,如果发现某个java包对我们的测试更加重要,可以给它一个更低的日志级别,比如DEB
-
SpringBoot使用JWT实现登录验证的方法示例
什么是JWT JSON Web Token(JWT)是一个开放的标准(RFC 7519),它定义了一个紧凑且自包含的方式,用于在各方之间以JSON对象安全地传输信息.这些信息可以通过数字签名进行验证和信任.可以使用秘密(使用HMAC算法)或使用RSA的公钥/私钥对来对JWT进行签名. 具体的jwt介绍可以查看官网的介绍:https://jwt.io/introduction/ jwt请求流程 引用官网的图片 中文介绍: 用户使用账号和面发出post请求: 服务器使用私钥创建一个jwt: 服务器返
-
SpringBoot继承LogStash实现日志收集的方法示例
一.环境准备 安装Elasticsearch.kibana.logstash,教程链接 安装教程 二.配置SpringBoot 依赖 在springBoot 项目下pom文件增加logStash 依赖包 <!--logStash--> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId>
-
springboot热部署知识点总结
spring cloud我想做成一个系列,所以spring cloud+eureka后面会慢慢说到的,有兴趣的小伙伴可以关注后续! 这一节就简单说说springboot的热部署了(我一直想不通为什么叫做热部署,看到这名字就吓退了我继续学习的欲望!),但是实际上可以把这个看成是一个小技巧. 就是导入一个依赖,要用的时候,就是快捷键操作:Ctrl+F9 有什么用呢?就是避免你每次对springboot修改一点东西,就要重新启动springboot应用,贼麻烦!而且对于电脑性能不怎么样的小伙伴来说(咳
-
SpringBoot实用小技巧之如何动态设置日志级别
前言 有时线上问题我们用打日志的方式来观察错误或埋点参数,但由于这些日志如果都打出来会占用大量存储空间而且覆盖了一些有效信息,所以线上级别一般设置INFO,调试级别用作特殊情况下.此时如果线上想查看调试级别下的日志,又不能更改日志级别后重新发布该怎么办? Spring Boot提供了日志级别动态配置功能,为我们的线上应用调试提供了很好的机制.在实际使用中需要结合Spring-Security提供的安全机制来保护Actuator 提供的各种系统级端点的安全访问. SpringBoot从版本 1.5
-
springboot手写一个自己的starter源码
springboot的最强大的就是那些xxxAutoconfiguration,但是这些xxxAutoConfiguration又依赖那些starter,只有导入了这些场景启动器(starter),我们很多自动配置类才能有用,并且还会新增一些功能,这次就来一起写个简单的starter,来看看内部到底是什么原理! 脑中大概有个印象:我们要用一个场景(比如web),直接导入下图所示的依赖,但是在jar包里面去看这个,你会发现里面只有一些基本的配置文件,什么类都没有,就能够想到这个一类就类似一个公司前
-
如何手写一个Spring Boot Starter
何为 Starter ? 想必大家都使用过 SpringBoot,在 SpringBoot 项目中,使用最多的无非就是各种各样的 Starter 了.那何为 Starter 呢?你可以理解为一个可拔插式的插件(组件).或者理解为场景启动器. 通过 Starter,能够简化以前繁杂的配置,无需过多的配置和依赖,它会帮你合并依赖,并且将其统一集成到一个 Starter 中,我们只需在 Maven 或 Gradle 中引入 Starter 依赖即可.SpringBoot 会自动扫描需要加载的信息并启动
-
手撸一个Spring Boot Starter并上传到Maven中央仓库
目录 打包上传到中央仓库 第一步 在issues.sonatype.org注册一个账号 第二步 在issues.sonatype.org提交Issue 第三步 配置Maven Setting.xml 第四步 配置项目的pom.xml 第五步 安装和配置GPG 第六步 项目打包上传 第七步 处理验证 问题 我1.0.1版本发布错了,有办法修改或者删除吗? 先手撸一个Spring Boot Starter 准备搞个项目,包含以下几个功能后边还会加新功能. 配置项加密(已实现) 服务调用链 数据脱敏
-
vue用Object.defineProperty手写一个简单的双向绑定的示例
前言 上次写了一个Object.defineProperty() 不详解,文末说要写用它来写个双向绑定.说话算话,说来就来 前文链接 Object.defineProperty() 不详解 先看最后效果 model演示.gif 什么是双向绑定? 1.当一个对象(或变量)的属性改变,那么调用这个属性的地方显示也应该改变,模型到视图(model => view) 2.当调用属性的这个地方改变了这个属性(通常是一个表单元素),那么这个对象(或变量)的属性也会改为最新的值 ,即视图到模型(view =>
-
模仿Spring手写一个简易的IOC
这个小项目是我读过一点Spring的源码后,模仿Spring的IOC写的一个简易的IOC,当然Spring的在天上,我写的在马里亚纳海沟,哈哈 感兴趣的小伙伴可以去我的github拉取代码看着玩 地址: https://github.com/zhuchangwu/CIOC 项目中有两种方式实现IOC: 第一种是基于dom4j实现的解析XML配置文件版 第二种是基于自定义注解实现全配置版 全注解版 模仿Spring原生的IOC机制如下: Interface类型的beanDefinition不会被实
-
React手写一个手风琴组件示例
目录 知识点 结构分析 AccordionItem子组件 Accordion容器组件 知识点 emotion语法 react语法 css语法 typescript类型语法 结构分析 根据上图,我们来分析一下,一个手风琴组件应该包含一个手风琴容器组件和多个手风琴子元素组件.因此,假设我们实现好了所有的逻辑,并写出使用demo,那么代码应该如下: <Accordion defaultIndex="1" onItemClick={console.log}> <Accordi
-
手写一个@Valid字段校验器的示例代码
上次给大家讲述了 Springboot 中的 @Valid 注解 和 @Validated 注解的详细用法: 详解Spring中@Valid和@Validated注解用法 当我们用上面这两个注解的时候,需要首先在对应的字段上打上规则注解,类似如下. @Data public class Employee { /** 姓名 */ @NotBlank(message = "请输入名称") @Length(message = "名称不能超过个 {max} 字符", max
-
Golang 手写一个简单的并发任务 manager
目录 前言 errgroup 需求拆解 实战代码 Job JobManager 错误处理 及时退出 完整代码 小结 前言 今天也是偏实战的内容,作为一个并发复习课,很简单,我们来看看怎样实现一个并发任务 manager. 在微服务的场景下,我们有很多任务的执行是没有明确的先后顺序的,比如一个接口同时要做到任务 A 和 任务 B,两个任务分别拿到一些数据,最后组装裁剪后通过接口下发. 此时,A 和 B 两个任务没有依赖关系,如果我们串行来执行,会拖慢整个任务的执行节奏,用并发的方式来优化是一个方向
-
利用Java手写一个简易的lombok的示例代码
目录 1.概述 2.lombok使用方法 3.lombok原理解析 4.手写简易lombok 1.概述 在面向对象编程中,必不可少的需要在代码中定义对象模型,而在基于Java的业务平台开发实践中尤其如此.相信大家在平时开发中也深有感触,本来是没有多少代码开发量的,但是因为定义的业务模型对象比较多,而需要重复写Getter/Setter.构造器方法.字符串输出的ToString方法.Equals/HashCode方法等.我们都知道Lombok能够替大家完成这些繁琐的操作,但是其背后的原理很少有人会
-
Java实现手写一个线程池的示例代码
目录 概述 线程池框架设计 代码实现 阻塞队列的实现 线程池消费端实现 获取任务超时设计 拒绝策略设计 概述 线程池技术想必大家都不陌生把,相信在平时的工作中没有少用,而且这也是面试频率非常高的一个知识点,那么大家知道它的实现原理和细节吗?如果直接去看jdk源码的话,可能有一定的难度,那么我们可以先通过手写一个简单的线程池框架,去掌握线程池的基本原理后,再去看jdk的线程池源码就会相对容易,而且不容易忘记. 线程池框架设计 我们都知道,线程资源的创建和销毁并不是没有代价的,甚至开销是非常高的.同
随机推荐
- ASP程序中常用的脚本语言
- 详解JavaScript中localStorage使用要点
- 查看物理内存的批处理
- java 实现计数排序和桶排序实例代码
- iOS 获取公历、农历日期的年月日的实例代码
- IOS 开发中发送e-mail的几种方法总结
- javascript 上下banner替换具体实现
- php面向对象全攻略 (十五) 多态的应用
- ASP中UBOUND与LUBOUND的使用方法
- PHP中抽象类、接口的区别与选择分析
- 详解nodejs 文本操作模块-fs模块(四)
- JSP+jquery使用ajax方式调用json的实现方法
- vbs SendKey 用法 Sendkey 键盘对应的码表
- js删除数组元素、清空数组的简单方法(必看)
- Bootstrap CSS布局之代码
- android组件SwipeRefreshLayout下拉小球式刷新效果
- 对联广告js flash激活
- centos7安装mysql并jdbc测试实例详解
- 详解Java的文件与目录管理以及输入输出相关操作
- Android编程实现获取当前连接wifi名字的方法