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

Spring boot創(chuàng)建自定義starter的完整步驟

 更新時間:2019年09月03日 11:19:26   作者:韓數(shù)  
這篇文章主要給大家介紹了關(guān)于Spring boot創(chuàng)建自定義starter的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言:

Springboot的出現(xiàn)極大的簡化了開發(fā)人員的配置,而這之中的一大利器便是springboot的starter,starter是springboot的核心組成部分,springboot官方同時也為開發(fā)人員封裝了各種各樣方便好用的starter模塊,例如:

  • spring-boot-starter-web//spring MVC相關(guān)
  • spring-boot-starter-aop //切面編程相關(guān)
  • spring-boot-starter-cache //緩存相關(guān)

starter的出現(xiàn)極大的幫助開發(fā)者們從繁瑣的框架配置中解放出來,從而更專注于業(yè)務(wù)代碼,而springboot能做的不僅僅停留于此,當(dāng)面對一些特殊的情況時,我們可以使用我們自定義的springboot starter。
在創(chuàng)建我們自定義的starter之前呢,我們先看看官方是怎么說的:

  • 模塊

在springboot官方文檔中,特別提到,我們需要創(chuàng)建兩個module ,其中一個是autoconfigure module  一個是 starter module ,其中 starter module 依賴 autoconfigure module

但是,網(wǎng)上仍然有很多blog在說這塊的時候其實會發(fā)現(xiàn)他們其實只用了一個module,這當(dāng)然并沒有錯,這點官方也有說明:

You may combine the auto-configuration code and the dependency management in a single module if you do not need to separate those two concerns

//如果不需要將自動配置代碼和依賴項管理分離開來,則可以將它們組合到一個模塊中。

  • 命名規(guī)范

springboot 官方建議springboot官方推出的starter 以spring-boot-starter-xxx的格式來命名,第三方開發(fā)者自定義的starter則以xxxx-spring-boot-starter的規(guī)則來命名,事實上,很多開發(fā)者在自定義starter的時候往往會忽略這個東西(因為不看官方文檔很難知道這件事情。同時也不會造成其他的后果,主要是顯得不夠?qū)I(yè))。

看看官方的starter

了解了這兩點之后,那么下面讓我們一塊去探索spingboot starter的奧秘吧。

按照springboot官方給的思路,starter的核心module應(yīng)該是autoconfigure,所以我們直接去看spring-boot-autoconfigure里面的內(nèi)容。

當(dāng)Spring Boot啟動時,它會在類路徑中查找名為spring.factories的文件。該文件位于META-INF目錄中。打開spring.factories文件,文件內(nèi)容太多了,為了避免我水篇幅,我們只看其中的一部分:

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\

我們可以發(fā)現(xiàn)一些比較眼熟的單詞,比如Aop,Rabbit,Cache ,當(dāng)springboot啟動的時候,將會嘗試加載這些配置類,如果該路徑下存在該類的話,則將運行它,并初始化與該配置類相關(guān)的bean。

點開一個看看:

@Configuration
@ConditionalOnClass({RabbitTemplate.class, Channel.class})
@EnableConfigurationProperties({RabbitProperties.class})
@Import({RabbitAnnotationDrivenConfiguration.class})
public class RabbitAutoConfiguration {
  
  //...代碼略..
}

我們先來了解一下這幾個注解:

@ConditionalOnClass :條件注解,當(dāng)classpath下發(fā)現(xiàn)該類的情況下進(jìn)行自動配置。

@EnableConfigurationProperties:外部化配置

@Import :引入其他的配置類

當(dāng)然,這并不是一種通用的套路,查看其他的配置類,我們會發(fā)現(xiàn)其標(biāo)注的注解往往也是有所區(qū)別的。

自定義自己的starter

首先我們新建一個maven項目,引入以下依賴:

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>
  </dependencies>
  <dependencyManagement>
    <!-- 我們是基于Springboot的應(yīng)用 -->
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.1.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

然后我們創(chuàng)建一個person類,用作后期我們測試的bean

public class Person {

  //屬性
  private int age;
  private String name;
  private String gender;
  
  /*此處省略getter and setter and toStering*/

}

然后我們也創(chuàng)建一個PersonConfigProperties來完成我們屬性的注入

@ConfigurationProperties(prefix = "mystarter.config.student")
public class PersonConfigProperties {


  private String name;
  private int age;
  private String gender;

  /*
  其他的配置信息。。。。
   */
  
  /*此處省略getter and setter and toStering*/
}

最后創(chuàng)建我們的自動配置類MyStarterAutoConfiguration.java

@Configuration
@EnableConfigurationProperties(PersonConfigProperties.class)
@ConditionalOnClass(Person.class)
public class MyStarterAutoConfiguration {


  @Bean
  @ConditionalOnProperty(prefix = "mystarter.config", name = "enable", havingValue = "true")
  public Person defaultStudent(PersonConfigProperties personConfigProperties) {
    Person person = new Person();
    person.setAge(personConfigProperties.getAge());
    person.setName(personConfigProperties.getName());
    person.setGender(personConfigProperties.getGender());
    return person;
  }
}

我感覺這是不是做好了?

我不要你覺得,我要我覺得

最后我們最重要的一步:

在resourecs文件目錄下創(chuàng)建META-INF,并創(chuàng)建我們自己的spring.factories,并把我們的 MyStarterAutoConfiguration添加進(jìn)去

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.jdkcb.mystarter.config.MyStarterAutoConfiguration

最后打包成jar包,在我們新的項目里面測試:

測試:

引入我們的starter,當(dāng)然也可以在本地直接引入我們的my-spring-boot-starter項目

  <dependency>
      <groupId>com.jdkcb</groupId>
      <artifactId>my-spring-boot-starter</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <scope>system</scope>
      <systemPath>${project.basedir}/src/main/resources/lib/my-spring-boot-starter-0.0.1-SNAPSHOT.jar</systemPath>
    </dependency>

在application.properties配置文件中添加我們相應(yīng)的配置

mystarter.config.enable=true
mystarter.config.person.name=小明
mystarter.config.person.age=5
mystarter.config.person.gender=男

新建一個測試的Controller:

@RestController
public class TestController {

  @Autowired
  private Person person;

  @RequestMapping("/getPerson")
  private Person getStudent() {
    return person;
  }

}

啟動項目,在瀏覽器地址欄輸入 http://127.0.0.1:8080/getPerson ,結(jié)果如下

{"age":5,"name":"小明","gender":"男"}

大功告成~

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Java基于享元模式實現(xiàn)五子棋游戲功能實例詳解

    Java基于享元模式實現(xiàn)五子棋游戲功能實例詳解

    這篇文章主要介紹了Java基于享元模式實現(xiàn)五子棋游戲功能,較為詳細(xì)的分析了享元模式的概念、功能并結(jié)合實例形式詳細(xì)分析了Java使用享元模式實現(xiàn)五子棋游戲的具體操作步驟與相關(guān)注意事項,需要的朋友可以參考下
    2018-05-05
  • Java實現(xiàn)幾種序列化方式總結(jié)

    Java實現(xiàn)幾種序列化方式總結(jié)

    本篇文章主要介紹了Java實現(xiàn)幾種序列化方式總結(jié),包括Java原生以流的方法進(jìn)行的序列化、Json序列化、FastJson序列化、Protobuff序列化,有興趣的可以了解一下,
    2017-03-03
  • 詳解Java攔截器以及自定義注解的使用

    詳解Java攔截器以及自定義注解的使用

    這篇文章主要為大家介紹了Java攔截器以及自定義注解的使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2021-12-12
  • 如何獲取java類中的屬性注釋

    如何獲取java類中的屬性注釋

    在開發(fā)中,有時需要獲取Java類的屬性注釋,尤其是當(dāng)JPA生成的表缺少注釋時,可以通過jdk自帶的tools.jar工具包來實現(xiàn),方法類似于生成javadoc文檔,需要在pom.xml文件中導(dǎo)入tools.jar的依賴,該jar文件一般位于JAVA_HOME/lib目錄下
    2024-09-09
  • MyBatisPlus查詢報錯Unknow?column?‘id‘?in?‘field?list‘解決分析

    MyBatisPlus查詢報錯Unknow?column?‘id‘?in?‘field?list‘解決分析

    這篇文章主要為大家介紹了MyBatisPlus查詢報錯Unknow?column?‘id‘?in?‘field?list‘解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • SpringBoot跨域問題的解決方法實例

    SpringBoot跨域問題的解決方法實例

    這篇文章主要給大家介紹了關(guān)于SpringBoot跨域問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • idea推送項目到gitee中的創(chuàng)建方法

    idea推送項目到gitee中的創(chuàng)建方法

    這篇文章主要介紹了idea推送項目到gitee中的創(chuàng)建方法,本文通過圖文實例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • 解決java.lang.NullPointerException報錯以及分析出現(xiàn)的幾種原因

    解決java.lang.NullPointerException報錯以及分析出現(xiàn)的幾種原因

    這篇文章介紹了解決java.lang.NullPointerException報錯的方法,以及分析出現(xiàn)的幾種原因。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • Java?OpenCV圖像處理之自定義圖像濾波算子

    Java?OpenCV圖像處理之自定義圖像濾波算子

    這篇文章主要為大家介紹了如何利用Java?OpenCV實現(xiàn)自定義圖像濾波(降噪)?算子,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下
    2022-02-02
  • springcloud如何獲取網(wǎng)關(guān)封裝的頭部信息

    springcloud如何獲取網(wǎng)關(guān)封裝的頭部信息

    這篇文章主要介紹了springcloud獲取網(wǎng)關(guān)封裝的頭部信息,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06

最新評論

瑞金市| 调兵山市| 旬邑县| 茌平县| 太湖县| 如皋市| 巴彦县| 廊坊市| 敦化市| 汕尾市| 城固县| 大姚县| 广元市| 布尔津县| 博客| 台南县| 类乌齐县| 清徐县| 新竹县| 丹凤县| 青海省| 鄄城县| 富川| 庆元县| 贵定县| 邵武市| 镇宁| 鸡东县| 延边| 高密市| 华池县| 新巴尔虎左旗| 夏津县| 松江区| 德钦县| 潜山县| 乐平市| 邻水| 万荣县| 木兰县| 潞城市|