中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring boot怎么創建自定義starter

發布時間:2021-06-07 12:59:58 來源:億速云 閱讀:143 作者:小新 欄目:編程語言

小編給大家分享一下Spring boot怎么創建自定義starter,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

前言:

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

  • spring-boot-starter-web//spring MVC相關

  • spring-boot-starter-aop //切面編程相關

  • spring-boot-starter-cache //緩存相關

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

  • 模塊

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

但是,網上仍然有很多blog在說這塊的時候其實會發現他們其實只用了一個module,這當然并沒有錯,這點官方也有說明:

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

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

  • 命名規范

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

看看官方的starter

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

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

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

# 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,\

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

點開一個看看:

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

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

@ConditionalOnClass :條件注解,當classpath下發現該類的情況下進行自動配置。

@EnableConfigurationProperties:外部化配置

@Import :引入其他的配置類

當然,這并不是一種通用的套路,查看其他的配置類,我們會發現其標注的注解往往也是有所區別的。

自定義自己的starter

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

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>
  </dependencies>
  <dependencyManagement>
    <!-- 我們是基于Springboot的應用 -->
    <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>

然后我們創建一個person類,用作后期我們測試的bean

public class Person {

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

}

然后我們也創建一個PersonConfigProperties來完成我們屬性的注入

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


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

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

最后創建我們的自動配置類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文件目錄下創建META-INF,并創建我們自己的spring.factories,并把我們的 MyStarterAutoConfiguration添加進去

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

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

測試:

引入我們的starter,當然也可以在本地直接引入我們的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配置文件中添加我們相應的配置

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 ,結果如下

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

以上是“Spring boot怎么創建自定義starter”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定襄县| 界首市| 北辰区| 东平县| 梓潼县| 赫章县| 仙桃市| 龙岩市| 天峻县| 西充县| 竹山县| 泽州县| 上栗县| 黄陵县| 滨海县| 陆河县| 隆林| 密山市| 吴川市| 屏边| 廊坊市| 黄浦区| 巴塘县| 靖远县| 社旗县| 靖州| 六枝特区| 曲阜市| 台东市| 财经| 托里县| 雷山县| 延川县| 东安县| 盘锦市| 博乐市| 富蕴县| 新野县| 兰州市| 安徽省| 公安县|