SpringBoot自定義Starter(自動配置類)

前言

SpringBoot其實從誕生以來圍繞的核心就是快速構建項目,快速構建的前提是有人幫你做好輪子,開發者只要拿來即用就好了,而造好輪子的人就是SpringBoot的開發者,引入自動配置的形式幫助開發者快速創建項目,而自動配置采用的是一種starter模塊形式,比如web模塊就引入spring-boot-starter-web。而且SpringBoot依舊支持第三方組件融入到SpringBoot的生態圈中,比如Mybatis的組件模塊名:mybatis-spring-boot-starter。今天就來分享一下第三方組件是如何引入SpringBoot里面來的。

介紹

自定義starter看懂了之后其實也不是很難,就拿最近我的一個開源框架做示例吧,正好也要開發一個支持SpringBoot的小功能。

iagent:一個采用接口動態代理的形式封裝HTTP請求小組件(快速跳轉),不過最近打算重構了。

本想著開發這個就是能夠在項目中統一一下調用其他廠商HTTP的接口,免得太亂的本質想法開發的,但是自從我接觸到微服務之后才發現原來有個Ribbon + Fegin框架,只能說博主的老東家太過傳統,自身接觸不到這塊的東西。

創建

首先需要引入SpringBoot自動配置組件

spring-boot-autoconfigure:自定義starter必備引入jar包

spring-boot-configuration-processor:該組件是用來在properties或者yml文件當中給予提示的。

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency></dependencies>

然后需要一個對應的實體類用來保存properties或yml文件中的環境變量,使用@ConfigurationProperties映射前綴

?然后還需要一個自動配置的類

?一般自動配置類命名方式為?XXXXAutoConfiguration?表示改類為自動配置類

@Configuration:這個注解不多介紹了,就是表示為配置類

@EnableConfigurationProperties:該注解是用來開啟配置參數的注解的,將配置文件中的變量加載到Properties的配置類對象當中,并注入到容器當中

并且SpringBoot還提供了一些@Conditional注解:

@ConditionalOnBean:當SpringIoc容器內存在指定Bean的條件
@ConditionalOnClass:當SpringIoc容器內存在指定Class的條件
@ConditionalOnExpression:基于SpEL表達式作為判斷條件
@ConditionalOnJava:基于JVM版本作為判斷條件
@ConditionalOnMissingBean:當SpringIoc容器內不存在指定Bean的條件
@ConditionalOnMissingClass:當SpringIoc容器內不存在指定Class的條件
@ConditionalOnNotWebApplication:當前項目不是Web項目的條件
@ConditionalOnProperty:指定的屬性是否有指定的值
@ConditionalOnResource:類路徑是否有指定的值
@ConditionalOnSingleCandidate:當指定Bean在SpringIoc容器內只有一個,或者雖然有多個但是指定首選的Bean
@ConditionalOnWebApplication:當前項目是Web項目的條件以上注解都是元注解@Conditional演變而來的,根據不用的條件對應創建以上的具體條件注解。

接下來就是加載配置文件了,根據SpringBoot的自動配置原理,SpringBoot會自動加載META-INF/spring.factories文件中的數據

所以還需要加一個配置,這樣SpringBoot才能掃描到這個自動配置類。

?

org.springframework.boot.autoconfigure.EnableAutoConfiguration表示自動配置類。

這樣自定義starter就好了,我們可以寫個測試用例試一下。

說明自定義starter已經開發好啦

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537091.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537091.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537091.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java并發編程之synchronized關鍵字解析

前言 公司加班太狠了&#xff0c;都沒啥時間充電&#xff0c;這周終于結束了。這次整理了Java并發編程里面的synchronized關鍵字&#xff0c;又稱為隱式鎖&#xff0c;與JUC包中的Lock顯示鎖相對應&#xff1b;這個關鍵字從Java誕生開始就有&#xff0c;稱之為重量級鎖&#xf…

raidrive安裝失敗_記一次RaiDrive映射OneDrive遇到的問題

大概在1周以前&#xff0c;出于需要存放直播錄像的原因&#xff0c;根據別人的視頻教程去自己動手搞了個5T網盤的帳號。(體驗一下&#xff0c;其實我還同時存一份在百度云&#xff0c;怕不穩定)用RaiDrive創建OneDrive的映射&#xff0c;在這步驟點確定后&#xff0c;會彈出微軟…

通過代理模式 + 責任鏈模式實現對目標執行方法攔截和增強功能

前言 最近需要實現一個插件功能&#xff0c;但是如果做成兩個接口的話&#xff08;即執行前和執行后&#xff09;&#xff0c;那么會降低插件的可玩性&#xff0c;所以需做成類似AOP的環繞通知形式&#xff0c;所以就使用到了責任鏈模式和代理模式進行實現。 介紹 代理模式(P…

Javascript基礎之-原型(prototype)

首先呢&#xff0c;prototype是對象里的一個內置屬性&#xff0c;并且呢&#xff0c;這個屬性是對于其他對象的一個引用。所以呢&#xff0c;思考下面的例子&#xff1a; var obj {a: 2 } var myObj Object.create(obj); console.log(myObj.a); // 2 console.log(myObj obj)…

Oracle查詢今天、昨天、本周、上周、本月、上月數據

查詢今天數據&#xff1a; SELECT COUNT(1) FROM T_CALL_RECORDS WHERE TO_CHAR(T_RKSJ,YYYY-MM-DD)TO_CHAR(SYSDATE,YYYY-MM-DD)&#xff1b; 查詢昨天數據&#xff1a; SELECT COUNT(1) FROM T_CALL_RECORDS WHERE TO_CHAR(T_RKSJ,YYYY-MM-DD)TO_CHAR(SYSDATE-1,YYYY-MM-DD)&…

usb一轉多 樹莓派zero_樹莓派 Zero USB/以太網方式連接配置教程

樹莓派 Zero 之所以成為一款非常棒的單板計算機并不全因為它小巧的尺寸和便宜的價格&#xff0c;還得益于它便捷、易用的特性。在加裝了 Zero Quick Plug 或 microUSB/USB 轉換頭之后&#xff0c;將樹莓派 Zero 和電腦連接起來。樹莓派 Zero 即可配置成 USB/以太網設備&#xf…

vscode Go 1.11.4 編譯錯誤 need Delve built by Go 1.11 or later

更新golang的版本為1.11.4之后vscode編譯錯誤&#xff1a;executables built by Go 1.11 or later need Delve built by Go 1.11 or later 原因是delve的版本太老了&#xff0c;需要更新&#xff0c;且delve的github地址已經更換&#xff0c;很多教程里的地址是不對的 新地址安…

oppo的sd卡在哪里打開_oppo的sd卡在哪里打開

大家好&#xff0c;我是時間財富網智能客服時間君&#xff0c;上述問題將由我為大家進行解答。以oppo A91為例&#xff0c;其sd卡可直接在文件管理頁面的存儲里面即可打開。OPPO A91的屏幕為6.4英寸&#xff0c;主屏分辨率2400乘以1080像素&#xff0c;機身顏色有暗夜星辰&…

Navicat使用教程:使用Navicat Query Analyzer優化查詢性能(第1部分)

下載Navicat Monitor最新版本Navicat Monitor 是一套安全、簡單而且無代理的遠程服務器監控工具。它具有強大的功能使你的監控發揮最大效用。受監控的服務器包括 MySQL、MariaDB 和 Percona Server&#xff0c;并與 Amazon RDS、Amazon Aurora、Oracle Cloud、Microsoft Azure …

dg oracle 切換模式_Oracle數據庫 DGbroker三種保護模式的切換

1.三種保護模式– Maximum protection在Maximum protection下&#xff0c; 可以保證從庫和主庫數據完全一樣&#xff0c;做到zero data loss.事務同時在主從兩邊提交完成&#xff0c;才算事務完成。如果從庫宕機或者網絡出現問題&#xff0c;主從庫不能通訊&#xff0c;主庫也立…

軟件包管理

應用程序&#xff1a;程序&#xff1a;Architecture C語言&#xff1a;源代碼-->&#xff08;編譯&#xff09; 二進制格式腳本&#xff1a;解釋器&#xff08;二進制程序&#xff09; 源代碼-->編譯-->鏈接-->運行程序&#xff1a;指令數據指令&#xff1a;芯片CP…

工業機器人碼垛教學實施_工業機器人應用案例碼垛詳解

工業機器人應用案例碼垛詳解隨著科技的進步以及現代化進程的加快&#xff0c;人們對搬運速度的要求越來越高&#xff0c;傳統的人工碼垛只能應用在物料輕便、尺寸和形狀變化大、吞吐量小的場合&#xff0c;這已經遠遠不能滿足工業的需求&#xff0c;機器人碼垛機應運而生。機器…

第一家云創大數據產業學院在佛山職業技術學院掛牌

2019年1月10日&#xff0c;“云創大數據產業學院揭牌暨戰略合作協議簽署儀式”在佛山職業技術學院電子信息學院會議室舉行。云創大數據總裁劉鵬教授、市場部經理單明月&#xff0c;佛山職業技術學院電子信息學院院長唐建生、副院長田鈞、學院辦公室主任趙雪章、信息工程系主任喬…

String與StringBuffer和StringBuilder的根本區別

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

16進制 ksh_AIX系統中如何統計進程打開的文件數目

作者&#xff1a;李燁楠 中國建設銀行來自微信公眾號&#xff1a;平臺人生環境: AIX 6.1 AIX7.1前言:用戶有時需要統計一個進程打開的文件數目&#xff0c;比如&#xff0c;在當前打開文件句柄使用量是否超過用戶資源限制(/etc/security/limits)中 nofiles的取值時。那么&#…

前端Http協議緩存初解

[TOC] 簡介 用戶獲取網絡資源&#xff0c;需要通過非常長的網絡去服務器上請求資源,另外服務端為了應對大量的用戶請求而不斷的提升硬件性能與帶寬。這對用戶與服務端都非常的不友好。而緩存就是為了解決用戶請求速度與釋放服務器壓力而生的。 為什么我會寫Http緩存&#xff0c…

詳解java訪問修飾符

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

educoder 二進制數據的位運算_二進制與位運算實用操作匯總(基礎篇)

位運算是最高效而且占用內存最少的算法操作&#xff0c;但也是最難看懂的操作。然而&#xff0c;關于位運算的用法&#xff0c;筆者查了許多資料&#xff0c;似乎都沒有找到詳細而系統的講解資料。筆者對位運算的操作相當感興趣&#xff0c;因此斗膽嘗試對位運算來一個的總結。…

企業為什么要做SEO,它的重要性有哪些?

對于SEO工作而言&#xff0c;我們知道一個網站做SEO的基礎訴求就是讓用戶和搜索引擎更好的理解網站內容&#xff0c;雖然隨著搜索引擎算法技術的迭代&#xff0c;目前SEO面臨更大的挑戰與競爭&#xff0c;但基于搜索營銷&#xff0c;它目前仍然顯得十分重要。 那么&#xff0…

白話說編程之java線程

白話說編程之java線程線程和進程&#xff1a;進程&#xff1a;線程&#xff1a;線程和進程的區別&#xff1a;詳解多線程:并發為什么使用并發并發的執行原理并行線程的五種狀態&#xff1a;創建狀態&#xff1a;就緒狀態&#xff1a;運行狀態&#xff1a;阻塞狀態&#xff1a;死…