电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

手擼一個 spring-boot-starter的全過程

瀏覽:5日期:2023-07-25 16:39:59

我們使用 Spring Boot,基本上都是沉醉在它 Stater 的方便之中。Starter 為我們帶來了眾多的自動化配置,有了這些自動化配置,我們可以不費吹灰之力就能搭建一個生產級開發環境,有的小伙伴會覺得這個 Starter 好神奇呀!其實 Starter 也都是 Spring + SpringMVC 中的基礎知識點實現的,接下來帶大家自己來擼一個 Starter ,慢慢揭開 Starter 的神秘面紗!

核心知識

其實 Starter 的核心就是條件注解 @Conditional ,當 classpath 下存在某一個 Class 時,某個配置才會生效。

定義自己的 Starter

所謂的 Starter ,其實就是一個普通的 Maven 項目,因此我們自定義 Starter ,需要首先創建一個普通的 Maven 項目,創建完成后,添加 Starter 的自動化配置類即可,如下:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>2.1.8.RELEASE</version></dependency>

配置完成后,我們首先創建一個 HelloProperties 類,用來接受 application.properties 中注入的值,如下:

@ConfigurationProperties(prefix = 'mystarter')public class HelloProperties { private String name = DEFAULT_NAME; private String msg = DEFAULT_MSG; private static final String DEFAULT_NAME = 'Antonio'; private static final String DEFAULT_MSG = 'Java 工程師'; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }}

這個配置類很好理解,將 application.properties 中配置的屬性值直接注入到這個實例中, @ConfigurationProperties 類型安全的屬性注入,即將 application.properties 文件中前綴為 mystarter 的屬性注入到這個類對應的屬性上, 最后使用時候,application.properties 中的配置文件,大概如下:

mystarter.name=zhangsanmystarter.msg=java

配置完成 HelloProperties 后,接下來我們來定義一個 HelloService ,然后定義一個簡單的 say 方法, HelloService 的定義如下:

public class HelloService { private String msg; private String name; public String sayHello() { return name + ' say ' + msg + ' !'; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getName() { return name; } public void setName(String name) { this.name = name; }}

這個很簡單,沒啥好說的。接下來就是我們的重軸戲,自動配置類的定義,用了很多別人定義的自定義類之后,我們也來自己定義一個自定義類。先來看代碼吧,一會松哥再慢慢解釋:

@Configuration@EnableConfigurationProperties(HelloProperties.class)@ConditionalOnClass(HelloService.class)public class HelloServiceAutoConfiguration { @Autowired HelloProperties helloProperties; @Bean HelloService helloService() { HelloService helloService = new HelloService(); helloService.setName(helloProperties.getName()); helloService.setMsg(helloProperties.getMsg()); return helloService; }}

關于這一段自動配置,解釋如下:

首先 @Configuration 注解表明這是一個配置類。 @EnableConfigurationProperties 注解是使我們之前配置的 @ConfigurationProperties 生效,讓配置的屬性成功的進入 Bean 中。@ConditionalOnClass 表示當項目當前 classpath 下存在 HelloService 時,后面的配置才生效。 自動配置類中首先注入 HelloProperties ,這個實例中含有我們在 application.properties 中配置的相關數據。 提供一個 HelloService 的實例,將 HelloProperties 中的值注入進去。

做完這一步之后,我們的自動化配置類就算是完成了,接下來還需要一個 spring.factories 文件,那么這個文件是干嘛的呢?大家知道我們的 Spring Boot 項目的啟動類都有一個 @SpringBootApplication 注解,這個注解的定義如下:

@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM,classes = AutoConfigurationExcludeFilter.class) })public @interface SpringBootApplication {}

大家看到這是一個組合注解,其中的一個組合項就是 @EnableAutoConfiguration,這個注解是干嘛的呢?@EnableAutoConfiguration 表示啟用 Spring 應用程序上下文的自動配置,該注解會自動導入一個名為 AutoConfigurationImportSelector 的類,而這個類會去讀取一個名為 spring.factories 的文件, spring.factories 中則定義需要加載的自動化配置類,我們打開任意一個框架的 Starter ,都能看到它有一個 spring.factories 文件,例如 MyBatis 的 Starter 如下:

手擼一個 spring-boot-starter的全過程

那么我們自定義 Starter 當然也需要這樣一個文件,我們首先在 Maven 項目的 resources 目錄下創建一個名為 META-INF 的文件夾,然后在文件夾中創建一個名為 spring.factories 的文件,文件內容如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.antonio.mystarter.HelloServiceAutoConfiguration

在這里指定我們的自動化配置類的路徑即可。如此之后我們的自動化配置類就算完成了。

本地安裝

如果在公司里,大伙可能需要將剛剛寫好的自動化配置類打包,然后上傳到 Maven 私服上,供其他同事下載使用,我這里就簡單一些,我就不上傳私服了,我將這個自動化配置類安裝到本地倉庫,然后在其他項目中使用即可。安裝方式很簡單,在 IntelliJ IDEA 中,點擊右邊的 Maven Project ,然后選擇 Lifecycle 中的 install ,雙擊即可,如下:

手擼一個 spring-boot-starter的全過程

雙擊完成后,這個 Starter 就安裝到我們本地倉庫了,當然小伙伴也可以使用 Maven 命令去安裝。

使用 Starter

接下來,我們來新建一個普通的 Spring Boot 工程,這個 Spring Boot 創建成功之后,加入我們自定義 Starter 的依賴,如下:

<dependency> <groupId>com.antonio</groupId> <artifactId>mystarter</artifactId> <version>1.0-SNAPSHOT</version></dependency>

此時我們引入了上面自定義的 Starter ,也即我們項目中現在有一個默認的 HelloService 實例可以使用,而且關于這個實例的數據,我們還可以在 application.properties 中進行配置,如下:

mystarter.name=lisimystarter.msg=java

配置完成后,方便起見,我這里直接在單元測試方法中注入 HelloSerivce 實例來使用,代碼如下:

@RunWith(SpringRunner.class)@SpringBootTestpublic class UsemystarterApplicationTests { @Autowired HelloService helloService; @Test public void contextLoads() { System.out.println(helloService.sayHello()); }}

執行單元測試方法即可。

到此這篇關于手擼一個 spring-boot-starter的文章就介紹到這了,更多相關spring-boot-starter內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 水性绝缘漆_凡立水_绝缘漆树脂_环保绝缘漆-深圳维特利环保材料有限公司 | 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 电梯装饰-北京万达中意电梯装饰有限公司 | 「阿尔法设计官网」工业设计_产品设计_产品外观设计 深圳工业设计公司 | 喷砂机厂家_自动喷砂机生产_新瑞自动化喷砂除锈设备 | 深圳天际源广告-形象堆头,企业文化墙,喷绘,门头招牌设计制作专家 | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 | 精密模具制造,注塑加工,吹塑和吹瓶加工,EPS泡沫包装生产 - 济南兴田塑胶有限公司 | 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 淋巴细胞分离液_口腔医疗器材-精欣华医疗器械(无锡)有限公司 | 穿线管|波纹穿线管|包塑金属软管|蛇皮管?闵彬专注弱电工程? | 深圳天际源广告-形象堆头,企业文化墙,喷绘,门头招牌设计制作专家 | 小型玉石雕刻机_家用玉雕机_小型万能雕刻机_凡刻雕刻机官网 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | Akribis直线电机_直线模组_力矩电机_直线电机平台|雅科贝思Akribis-杭州摩森机电科技有限公司 | 薪动-人力资源公司-灵活用工薪资代发-费用结算-残保金优化-北京秒付科技有限公司 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 模具钢_高速钢_不锈钢-万利钢金属材料 | 外贸资讯网 - 洞悉全球贸易,把握市场先机| 洛阳防爆合格证办理-洛阳防爆认证机构-洛阳申请国家防爆合格证-洛阳本安防爆认证代办-洛阳沪南抚防爆电气技术服务有限公司 | 机械立体车库租赁_立体停车设备出租_智能停车场厂家_春华起重 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 活性炭厂家-蜂窝活性炭-粉状/柱状/果壳/椰壳活性炭-大千净化-活性炭 | 锻造液压机,粉末冶金,拉伸,坩埚成型液压机定制生产厂家-山东威力重工官方网站 | 视觉检测设备_自动化检测设备_CCD视觉检测机_外观缺陷检测-瑞智光电 | 咖啡加盟-咖啡店加盟-咖啡西餐厅加盟-塞纳左岸咖啡西餐厅官网 | 爆破器材运输车|烟花爆竹运输车|1-9类危险品厢式运输车|湖北江南专用特种汽车有限公司 | 轻型地埋电缆故障测试仪,频响法绕组变形测试仪,静荷式卧式拉力试验机-扬州苏电 | 减速机三参数组合探头|TSM803|壁挂式氧化锆分析仪探头-安徽鹏宸电气有限公司 | 合肥花魁情感婚姻咨询中心_挽回爱情_修复婚姻_恋爱指南 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 卫浴散热器,卫浴暖气片,卫生间背篓暖气片,华圣格浴室暖气片 | 济南品牌包装设计公司_济南VI标志设计公司_山东锐尚文化传播 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App |