最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年06月09日 14:39:44   作者:阿福聊編程  
這篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)starter原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1、Mybatis 自定義配置的分析

在我們自定義starter之前我們寫了解一下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

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

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

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

MybatisAutoConfiguration

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

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

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

MybatisProperties

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

分析完這些規(guī)則后,我們再來看看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,下面我們自己來實(shí)現(xiàn)一個(gè)自定義的starter。

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

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

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

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

@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)建一個(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,所以我們先對zfauto-spring-boot-autoconfigure進(jìn)行打包,然后通過 mvn install 打到本地倉庫(如何打包見下圖)。

到此我們自定義的類實(shí)現(xiàn)。那我們來測試一下,這個(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

具體的測試類

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

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

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

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

相關(guān)文章

  • 深入剖析Java編程中的序列化

    深入剖析Java編程中的序列化

    這篇文章主要介紹了深入剖析Java編程中的序列化,文中談到了序列化時(shí)對象的繼承等各種問題,案例詳盡,強(qiáng)烈推薦!需要的朋友可以參考下
    2015-07-07
  • 詳解SpringBoot實(shí)現(xiàn)事件同步與異步監(jiān)聽

    詳解SpringBoot實(shí)現(xiàn)事件同步與異步監(jiān)聽

    這篇文章主要通過示例為大家詳細(xì)介紹了SpringBoot中的事件的用法和原理以及如何實(shí)現(xiàn)事件同步與異步監(jiān)聽,快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • IntelliJ Idea常用11款插件(提高開發(fā)效率)

    IntelliJ Idea常用11款插件(提高開發(fā)效率)

    這篇文章主要介紹了IntelliJ Idea常用11款插件(提高開發(fā)效率),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • java中如何使用泛型方法比較大小

    java中如何使用泛型方法比較大小

    這篇文章主要介紹了java中如何使用泛型方法比較大小,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 關(guān)于SpringSecurity認(rèn)證邏輯源碼分析

    關(guān)于SpringSecurity認(rèn)證邏輯源碼分析

    這篇文章主要介紹了關(guān)于SpringSecurity認(rèn)證邏輯源碼分析,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java switch語句的使用詳解

    Java switch語句的使用詳解

    Java switch語句隨JDK演進(jìn)支持int/char、String及模式匹配,具備表達(dá)式限制、穿透控制、作用域隔離等特性,適用于狀態(tài)機(jī)、命令解析等場景,需注意類型兼容性及break使用,推薦使用箭頭語法和編譯器優(yōu)化提升代碼質(zhì)量
    2025-07-07
  • 為什么rest接口返回json建議采用下劃線形式,不要用駝峰

    為什么rest接口返回json建議采用下劃線形式,不要用駝峰

    為什么rest接口返回json建議采用下劃線形式,不要用駝峰?今天小編就來為大家說明一下原因,還等什么?一起跟隨小編過來看看吧
    2020-09-09
  • SpringBoot實(shí)現(xiàn)簡易支付寶網(wǎng)頁支付功能

    SpringBoot實(shí)現(xiàn)簡易支付寶網(wǎng)頁支付功能

    小編最近實(shí)現(xiàn)一個(gè)功能基于springboot程序的支付寶支付demo,非常不錯(cuò)適合初學(xué)者入門學(xué)習(xí)使用,今天把SpringBoot實(shí)現(xiàn)簡易支付寶網(wǎng)頁支付功能的示例代碼分享給大家,感興趣的朋友參考下吧
    2021-10-10
  • Java的Struts框架中配置國際化的資源存儲(chǔ)的要點(diǎn)解析

    Java的Struts框架中配置國際化的資源存儲(chǔ)的要點(diǎn)解析

    這篇文章主要介紹了Java的Struts框架中配置國際化的資源存儲(chǔ)的要點(diǎn)解析,針對用戶所使用的語言來配置資源文件,需要的朋友可以參考下
    2016-04-04
  • 淺談Spring Data Redis讀不到設(shè)進(jìn)去的值

    淺談Spring Data Redis讀不到設(shè)進(jìn)去的值

    本文主要介紹了Spring Data Redis怎么讀不到我剛才設(shè)進(jìn)去的值,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論

西峡县| 兴城市| 余姚市| 车险| 屏山县| 南召县| 迁西县| 泸州市| 中江县| 汝阳县| 年辖:市辖区| 望谟县| 望奎县| 晋江市| 蒙城县| 江川县| 武鸣县| 开封市| 南木林县| 清镇市| 武汉市| 德清县| 政和县| 永济市| 南江县| 普安县| 耒阳市| 涞水县| 雷州市| 达尔| 资兴市| 哈巴河县| 鹤壁市| 拉萨市| 佛冈县| 延边| 喀喇| 芜湖县| 金平| 南江县| 开远市|