范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

编写自定义的springbootstarter

  原理
  使用一个公用的starter的时候,只需要将相应的依赖添加的Maven的配置文件当中即可,免去了自己需要引用很多依赖类,并且SpringBoot会自动进行类的自动配置。那么 SpringBoot 是如何知道要实例化哪些类,并进行自动配置的呢?
  首先,SpringBoot 在启动时会去依赖的starter包中寻找  resources/META-INF/spring.factories   文件,然后根据文件中配置的Jar包去扫描项目所依赖的Jar包,这类似于 Java 的 SPI 机制。
  第二步,根据  spring.factories  配置加载AutoConfigure  类。
  最后,根据  @Conditional  注解的条件,进行自动配置并将Bean注入Spring Context 上下文当中。
  我们也可以使用 @ImportAutoConfiguration({MyServiceAutoConfiguration.class})   指定自动配置哪些类。实现
  终于到了代码实现的步骤,接下来就开始编码我们自己的SpringBoot-starter。 第一步创建一个SpringBoot 项目,并添加下面两个依赖到pom.xml文件当中              org.springframework.boot         spring-boot-configuration-processor         true                   org.springframework.boot         spring-boot-autoconfigure      
  其中  spring-boot-configuration-processor   的作用是编译时生成 spring-configuration-metadata.json   ,此文件主要给IDE使用。如当配置此jar相关配置属性在 application.yml   ,你可以用ctlr+鼠标左键点击属性名,IDE会跳转到你配置此属性的类中。
  我们日常使用的Spring官方的Starter一般采取 spring-boot-starter-{name}   的命名方式,如 spring-boot-starter-web   。
  而非官方的Starter,官方建议  artifactId   命名应遵循{name}-spring-boot-starter   的格式。 例如:zdy-spring-boot-starter   。com.zdy zdy-spring-boot-starter 1.0.0-SNAPSHOT jar第二步编写我们的Service类
  这里讲一下我们的Starter要实现的功能,很简单,提供一个 Service  ,包含一个能够将配置文件中配置的字符串根据传入的字符进行分割的方法String[] split(String separatorChar)  。public class StarterService {     private String config;      public StarterService(String config) {         this.config = config;     }          public String[] split(String separatorChar) {         return StringUtils.split(this.config, separatorChar);     } }第三步编写配置文件读取类@ConfigurationProperties("com.service") public class StarterServiceProperties {     private String config;          public void setConfig(String config) {         this.config = config;     }          public String getConfig() {         return config;     }  } 第四步,编写AutoConfigure类 ,这步是关键点@Configuration @ConditionalOnClass(StarterService.class) @EnableConfigurationProperties(StarterServiceProperties.class) public class StarterAutoConfigure {      @Autowired     private StarterServiceProperties properties;      @Bean     @ConditionalOnMissingBean     @ConditionalOnProperty(prefix = "com.service", value = "enabled", havingValue = "true")     StarterService starterService (){         return new StarterService(properties.getConfig());     }  }
  解释一下代码中用到的几个注解: @ConditionalOnClass  ,当classpath  下发现该类的情况下进行自动配置。@ConditionalOnMissingBean  ,当Spring Context  中不存在该Bean  时。@ConditionalOnProperty(prefix = "com.service",value = "enabled",havingValue = "true")  ,当配置文件中com.service.enabled=true  时。下面列举SpringBoot中的所有@Conditional注解及作用@ConditionalOnBean:当容器中有指定的Bean的条件下   @ConditionalOnClass:当类路径下有指定的类的条件下   @ConditionalOnExpression:基于SpEL表达式作为判断条件   @ConditionalOnJava:基于JVM版本作为判断条件   @ConditionalOnJndi:在JNDI存在的条件下查找指定的位置   @ConditionalOnMissingBean:当容器中没有指定Bean的情况下   @ConditionalOnMissingClass:当类路径下没有指定的类的条件下   @ConditionalOnNotWebApplication:当前项目不是Web项目的条件下   @ConditionalOnProperty:指定的属性是否有指定的值   @ConditionalOnResource:类路径下是否有指定的资源   @ConditionalOnSingleCandidate:当指定的Bean在容器中只有一个,或者在有多个Bean的情况下,用来指定首选的Bean @ConditionalOnWebApplication:当前项目是Web项目的条件下   最后一步,在resources/META-INF/下创建spring.factories文件,并添加如下内容:org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.autocinfigure.StarterAutoConfigure
  至此,我们的一个Starter代码部分就是完成了,下面将项目安装到本地Maven仓库中。 发布
  在项目根目录执行  mvn install   进行打包安装。测试
  将Starter项目的依赖添加到我们自己的SpringBoot项目中      com.zdy 	zdy-spring-boot-starter     1.0-SNAPSHOT  
  在 application.yml   配置文件中添加配置信息:com   service     enabled: true     config: a,b,c
  在本地使用 JUnit  进行代码测试@Autowired private StarterService starterService;  @Test public void starterTest() {     String[] splitArray = starterService.split(",");     System.out.println(splitArray); }
  好,到这我们的一个自定义Stater就完成了

全新量子计算软件发布,国产量子计算软硬件结合迈出重要一步中科院软件所团队日前发布全新量子计算编程软件isQCore,并成功部署至世界领先的超导量子硬件平台,标志着国产量子计算软硬件结合迈出重要一步。量子计算软件是连接用户与量子计算硬件设用智能助你行稳至远小鹏NGP上线周年行驶里程近两千万公里2022年1月26日今日,小鹏汽车XPILOT3。0智能辅助驾驶系统的明星功能高速NGP智能导航辅助驾驶迎来向用户开放一周年的日子。一年来,高速NGP依托小鹏P7量产车中领先的软硬开发一个APP需要多少钱?如果你认为一个APP开发项目只是需要开发费用?你就大错特错了,从头说说细点,内容纯干货建议点赞收藏开发一个APP需要多少钱?其实APP的费用一共分为三块第三块我相信99的人都不知道基于SSM框架的学籍管理系统,附源码今天介绍的是一个基于SSM框架和LayUI的学籍管理系统,功能完善界面美观。开发环境IDEAMySql5。7tomcat8maven3。6实现功能分为管理员教师和学生三种角色,实现索尼发布真无线耳机LinkBuds采用全新开放环形设计CNMO新闻近日索尼推出了全新的真无线耳机LinkBuds。与传统真无线耳机不同的是,索尼LinkBuds采用完全开放的设计,它的整体造型有些类似于甜甜圈,用户可以直接将甜甜圈放进相机厂商不够用了,好的都被华为OV挑走了,小米苹果怎么办?感谢邀请相机厂商不够用了,好的都被华为OV挑走了,小米苹果怎么办?我觉得这种说法是不正确的,确实就像我们看到的华为最早和徕卡合作,拍照能力上去了,而vivo现在和光学巨头蔡司合作了面向学龄前儿童教育app拟将停止运行,瓜瓜龙斑马等或将受影响最近,北京市教育委员会发布关于进一步做好教育移动互联网应用程序备案及管理工作的通知(征求意见稿)(以下简称意见稿),其中规定,面向学龄前儿童培训的教育移动应用一律停止运行。众所周知不到50克的小硬件,批量开启百台电脑,价格不到百元疫情期间,远程办公这种几年前还算新颖的办公方式迅速被大众所熟识,足不出户的办公方式,很多人都称真香!然而烦恼的是,远程控制软件只能在被控主机开机的状态下才能使用,一旦被控主机被关闭安徽安凯汽车股份有限公司关于收到国家新能源汽车推广补贴的公告证券代码000868证券简称安凯客车公告编号2022007安徽安凯汽车股份有限公司关于收到国家新能源汽车推广补贴的公告本公司及董事会全体成员保证信息披露的内容真实准确完整,没有虚假红米K50配置被曝光,骁龙870超清影像,价格是最大悬念一直以来红米手机都以性价比著称,每一代新旗舰上市的时候也总能够吸引众多米粉的关注与青睐,今年的红米K50系列也是未发先火。不过,由于这次的红米K50系列来得有点晚,所以外界也一直在米家零冷水燃气热水器S118L,使用分享米家零冷水燃气热水器S118L,使用分享!年前收到来自ZEALER众测的最新的米家零冷水热水器,使用了一周来分享下我的真实使用感受再次感谢ZEALER提供的产品支持!安装提供上门安
javaNio初级学习javaNio学习笔记(一)学习参考文档httptutorials。jenkov。comjavanioindex。html什么是javaNiojavaNio是javanewIO。是续航仅400出头,落地15万元,这车还想卖吗?今年6月份,江淮iEVA50也推出了换电车型,虽说换电车型很好的解决了充电焦虑,但还是有着换电站覆盖率较低的问题。今天小编就和大家聊一聊非换电版的20款江淮iEVA50。外观方面,不到9万的RS3?1。5TCVT,这台宝骏有点意思宝骏相信大家都很熟悉,其旗下的大多数车型都是靠着实惠的价格和不错的性价比而受到不少消费者的喜爱。今天小编就给大家介绍一款宝骏旗下的SUV20款宝骏RS3。外观方面,该车整体的设计非为什么你定的OKR,走着走着就变成了KPI?从谷歌刮起的OKR风吹进了中国,随着同样的拥趸者字节跳动的崛起,这股风席卷了诸多企业,许多老板听了管理课之后纷纷效仿,于是呐喊着去KPI,拥抱OKR!KPI已死,OKR怎么立?如何绩效考核不重要,绩效实现才重要很多老板和HR,走着走着就忘掉了初心。组织发展如此干部管理如此薪酬管理如此,绩效管理亦如此。大家在手段和目的之间左右徘回,开始时有明确的目的,知道考核只是手段,但到最后,手段变成了动态薪酬如何设计需要注意什么?动态薪酬(DynamicSalary)的背景传统的给薪依据,往往以职位学历工作经历及面试时的商议为主。现在一些企业也在采用绩效薪酬,但由于考核评价体系不健全,致使绩效薪酬背离了初衷华为任职资格体系,不服不行在用人这件事上,任正非曾共开表态对于华为来说,我们要的是战士,而不是完美的苍蝇。所谓人才,不是十全十美,能够满足各种需求的人,而是真正的能上战场的人。华为的18万奋斗者,造就了今天励志,看看这台保时捷718,车主是怎么实现自己人生的dreamcar施工车型保时捷718Boxster车身颜色竞速黄施工项目威固v10系列隐形车衣顶级威固前挡vk70侧后k35窗膜对于很多汽车粉丝来说,保时捷的招牌一直有着独特的韵味,旗下各款有着截随机红包算法(java)随机红包算法,每个人都有自己的实现思路。packagecom。jmmq。load。jim。algorithmimportjava。math。BigDecimalimportjavajavaNIO学习笔记(三)javaNIO学习笔记(三)JavaNIOBuffer缓冲区,可以通过channel将数据写入缓冲区,也可以从通道中读取数据到缓冲区缓冲区本质上是一个内存块,您可以将数据写入其中,javaNIO学习笔记(二)javaNIO学习笔记(二)参考文档httptutorials。jenkov。comjavaniochannels。htmlJavaNIOChannel和传统的IO中的InputS