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

您的位置:首頁技術(shù)文章
文章詳情頁

SpringBoot如何實現(xiàn)starter原理詳解

瀏覽:11日期:2023-05-13 13:18:55

1、Mybatis 自定義配置的分析

在我們自定義starter之前我們寫了解一下Mybatis 是如何實現(xiàn)starter

在SpringBoot 引入的依賴如下:

<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency>

mybatis的maven 依賴,主要涉及到的內(nèi)容,spring.factories、MybatisAutoConfiguration、MybatisProperties

SpringBoot如何實現(xiàn)starter原理詳解

我們來看一下 META-INF/spring.factories文件,這個文件是以Map 形式存放的。key是EnableAutoConfiguration類的全類名,

value是一個MybatisAutoConfiguration,這就是當(dāng)項目啟動自動配置的類。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration

MybatisAutoConfiguration

SpringBoot如何實現(xiàn)starter原理詳解

@Configuration //標(biāo)示是一個配置類

@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class}) //表示當(dāng)SqlSessionFactory,SqlSessionFactoryBean存在這個配置類才生效。

@EnableConfigurationProperties({MybatisProperties.class}):就是把 MybatisProperties加入到 IOC 容器中。

MybatisProperties

SpringBoot如何實現(xiàn)starter原理詳解

對于@ConfigurationProperties注解它的作用就是把全局配置文件中的值綁定到實體類JavaBean上面(將配置文件中的值與MybatisProperties綁定起來),而@EnableConfigurationProperties主要是把以綁定值JavaBean加入到spring容器中。

分析完這些規(guī)則后,我們再來看看mybatis自定義的starter 的項目結(jié)構(gòu),主要是分為兩個項目(一個是空項目(mtbatis-spring-boot-starter),一個是具體的實現(xiàn)自定義配置的項目(mybatis-spring-boot-autoconfigure)),空項目只是引入自定義配置項目的依賴,而實現(xiàn)映入的時候我們只需要映入空項(mtbatis-spring-boot-starter)即可。

到此我們已經(jīng)分析完mybatis 自定義的starter,下面我們自己來實現(xiàn)一個自定義的starter。

2、自定義starter的實現(xiàn)

項目結(jié)構(gòu)展示:

SpringBoot如何實現(xiàn)starter原理詳解

首先我們先定義一個 zfauto-spring-boot-autoconfigure 工程

編寫屬性類:添加 @ConfigurationProperties注解和前綴 zf.auto。之后我們就可以在 application.properties或application.yml 中 使用 zf.auto=指定參數(shù)了,由于篇幅的原因省略setter getter方法,實際是需要的,不然無法注入;

@ConfigurationProperties(prefix = 'zf.auto')public class HelloProperties { private String prefix; private String suffix;}

編寫配置類:加入@Configuration注解,@ConditionalOnWebApplication是web 應(yīng)用配置類才起作用,以及 @EnableConfigurationProperties(HelloProperties.class) 注解,將屬性注入到 IOC 容器中。

@Configuration@ConditionalOnWebApplication@EnableConfigurationProperties(HelloProperties.class)public class HelloServiceAutoConfiguration { @Autowired HelloProperties helloProperties; @Bean public HelloService helloService(){ HelloService helloService=new HelloService(); helloService.setHelloProperties(helloProperties); return helloService; }}

編寫 spring.factories 文件:在resources路徑下面創(chuàng)建META-INF,文件夾,然后創(chuàng)建spring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.zfauto.starter.HelloServiceAutoConfiguration

然后我們在創(chuàng)建一個空項目(zfauto-spring-boot-starter),在這個項目中我們引入zfauto-spring-boot-autoconfigure依賴

<dependency> <groupId>com.zfauto.starter</groupId> <artifactId>zfauto-spring-boot-autoconfigure</artifactId> <version>0.0.1-SNAPSHOT</version></dependency>

HelloService 實現(xiàn)的功能,省略setter,getter的方法(實際需要)

public class HelloService { HelloProperties helloProperties; public String sayHello(String name){ return helloProperties.getPrefix()+ ','+name+','+helloProperties.getSuffix(); }}

最后我們 分別將項目打包,由于zfauto-spring-boot-starter是依賴于zfauto-spring-boot-autoconfigure,所以我們先對zfauto-spring-boot-autoconfigure進(jìn)行打包,然后通過 mvn install 打到本地倉庫(如何打包見下圖)。

SpringBoot如何實現(xiàn)starter原理詳解

到此我們自定義的類實現(xiàn)。那我們來測試一下,這個和我們引入其他的starter一樣了。

創(chuàng)建項目zfauto-spring-boot-starter-test ,引入自定義starter的依賴。

<dependency> <groupId>com.zfauto.starter</groupId> <artifactId>zfauto-spring-boot-starter</artifactId> <version>0.0.1-SNAPSHOT</version></dependency>

application.properties中的配置如下

zf.auto.prefix=hello

zf.auto.suffix=123

具體的測試類

@RestControllerpublic class HelloController { @Autowired HelloService helloService; @RequestMapping('/sayHello') public String sayHello(){ return helloService.sayHello('小福子'); }}

項目訪問路徑:http://localhost:8080/sayHello

SpringBoot如何實現(xiàn)starter原理詳解

好了 ,本文就說到這里,本文相關(guān)案例我已經(jīng)上傳到 碼云 ,小伙伴們可以自行下載:https://gitee.com/xiaofuzi123/springboot-learning-example

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 谷歌关键词优化-外贸网站优化-Google SEO小语种推广-思亿欧外贸快车 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 屏蔽泵厂家,化工屏蔽泵_维修-淄博泵业 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 酵素生产厂家_酵素OEM_酵素加盟_酵素ODM_酵素原料厂家_厦门益力康 | 点胶机_点胶阀_自动点胶机_智能点胶机_喷胶机_点胶机厂家【欧力克斯】 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 转子泵_凸轮泵_凸轮转子泵厂家-青岛罗德通用机械设备有限公司 | 南京精锋制刀有限公司-纵剪机刀片_滚剪机刀片_合金刀片厂家 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 油漆辅料厂家_阴阳脚线_艺术漆厂家_内外墙涂料施工_乳胶漆专用防霉腻子粉_轻质粉刷石膏-魔法涂涂 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 砖机托板价格|免烧砖托板|空心砖托板厂家_山东宏升砖机托板厂 | 郑州外墙清洗_郑州玻璃幕墙清洗_郑州开荒保洁-河南三恒清洗服务有限公司 | 山东led显示屏,山东led全彩显示屏,山东LED小间距屏,临沂全彩电子屏-山东亚泰视讯传媒有限公司 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 工控机-工业平板电脑-研华工控机-研越无风扇嵌入式box工控机 | 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | 【化妆品备案】进口化妆品备案流程-深圳美尚美化妆品有限公司 | 空心明胶胶囊|植物胶囊|清真胶囊|浙江绿键胶囊有限公司欢迎您! | 滚塑PE壳体-PE塑料浮球-警示PE浮筒-宁波君益塑业有限公司 | 电动打包机_气动打包机_钢带捆扎机_废纸打包机_手动捆扎机 | 减速机电机一体机_带电机减速器一套_德国BOSERL电动机与减速箱生产厂家 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 超高频感应加热设备_高频感应电源厂家_CCD视觉检测设备_振动盘视觉检测设备_深圳雨滴科技-深圳市雨滴科技有限公司 | 香港新时代国际美容美发化妆美甲培训学校-26年培训经验,值得信赖! | 硫化罐_蒸汽硫化罐_大型硫化罐-山东鑫泰鑫智能装备有限公司 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 清水混凝土修复_混凝土色差修复剂_混凝土色差调整剂_清水混凝土色差修复_河南天工 | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | SRRC认证_电磁兼容_EMC测试整改_FCC认证_SDOC认证-深圳市环测威检测技术有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 硬质合金模具_硬质合金非标定制_硬面加工「生产厂家」-西迪技术股份有限公司 | 防水接头-电缆防水接头-金属-电缆密封接头-不锈钢电缆接头 | 生物风-销售载体,基因,质粒,ATCC细胞,ATCC菌株等,欢迎购买-百风生物 | 企小优-企业数字化转型服务商_网络推广_网络推广公司 | 橡胶膜片,夹布膜片,橡胶隔膜密封,泵阀设备密封膜片-衡水汉丰橡塑科技公司网站 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 |