色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

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

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

1、Mybatis 自定義配置的分析

在我們自定義starter之前我們寫(xiě)了解一下Mybatis 是如何實(shí)現(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如何實(shí)現(xiàn)starter原理詳解

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

value是一個(gè)MybatisAutoConfiguration,這就是當(dāng)項(xiàng)目啟動(dòng)自動(dòng)配置的類(lèi)。

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

MybatisAutoConfiguration

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

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

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

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

MybatisProperties

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

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

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

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

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

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

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

首先我們先定義一個(gè) zfauto-spring-boot-autoconfigure 工程

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

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

編寫(xiě)配置類(lèi):加入@Configuration注解,@ConditionalOnWebApplication是web 應(yīng)用配置類(lèi)才起作用,以及 @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; }}

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

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

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

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

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

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

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

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

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

創(chuàng)建項(xià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

具體的測(cè)試類(lèi)

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

項(xiàng)目訪問(wèn)路徑:http://localhost:8080/sayHello

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

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

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

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 男人的天堂视频在线 | 欧美一线不卡在线播放 | 不卡一级毛片免费高清 | 欧美人成在线视频 | 鲁老汉精品视频在线观看 | 精品韩国主播福利视频在线观看一 | 亚洲美女在线播放 | 永久免费看毛片 | 亚洲欧美v视色一区二区 | 中文字幕在线不卡 | 亚洲国产情侣一区二区三区 | 永久免费毛片手机版在线看 | 久9这里精品免费视频 | 久在草在线 | 欧美日韩国产一区二区三区播放 | 免费无遮挡毛片 | 9lporm自拍视频在线 | 成人亚洲国产精品久久 | 久久精品久久精品 | 久久精品免费一区二区视 | 男女国产一级毛片 | 无套内谢孕妇毛片免费看 | 欧美日韩中文字幕在线观看 | 久久亚洲私人国产精品va | 午夜寂寞福利 | 高清色黄毛片一级毛片 | 黄色网址视频在线观看 | 性刺激欧美三级在线现看中文 | 又黄又骚 | 亚洲网美女| 精品久久在线 | 国产精品亚洲专区在线播放 | 国产日韩欧美综合一区二区三区 | 久久亚洲精品永久网站 | 欧美在线看欧美高清视频免费 | 做爰成人五级在线视频| 亚洲欧洲日产国码一级毛片 | 纯欧美一级毛片_免费 | 男人天堂网在线 | 国产午夜不卡在线观看视频666 | 午夜三级a三级三点在线观看 |