欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot自動配置之自定義starter的實現(xiàn)代碼

 更新時間:2020年10月17日 09:36:55   作者:溫森  
這篇文章主要介紹了SpringBoot自動配置之自定義starter的實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

前言:前面已經(jīng)介紹了自動配置的很多原理,現(xiàn)在我們著手自己定義一個starter。

需求:自定義redis-starter,要求當導(dǎo)入redis坐標后,SpringBoot自動創(chuàng)建Jedis的Bean。正式開始之前,我們可以查看Mybatis的起步依賴是如果實現(xiàn)自動配置的。我這里就省略了,大家根據(jù)之前的分析文章,自己看源碼即可。

一、先創(chuàng)建一個SpringBoot工程redis-spring-boot-autoconfigure,該工程中添加jedis依賴,并且創(chuàng)建一個自動配置類RedisAutoConfigure,實現(xiàn)jedis實例(bean)注入到IOC容器中。

/**
 * @description:自定義自動配置類:將Jedis注入到IOC容器中
 * @date: 2020/10/10 15:08
 * @author: winson
 */
@Configuration
@EnableConfigurationProperties(RedisProperties.class)
public class RedisAutoConfigure {

 /**
  * 提供jedis的bean
  * @param redisProperties
  * @return
  */
 @Bean
 public Jedis jedis(RedisProperties redisProperties) {
  return new Jedis(redisProperties.getHost(), redisProperties.getPort());
 }

}

考慮到redis的有兩個參數(shù)(host、port)必須是可以動態(tài)賦值的,所以我們自定義一個屬性配置類RedisProperties,該屬性配置類從配置文件獲取屬性值,并設(shè)置host、port屬性的默認值,如下:

/**
 * @description:自定義屬性配置類
 * @date: 2020/10/10 15:11
 * @author: winson
 */
@ConfigurationProperties(prefix = "redis")
public class RedisProperties {

 private String host = "127.0.0.1";

 private int port = 6379;

 public String getHost() {
  return host;
 }

 public void setHost(String host) {
  this.host = host;
 }

 public int getPort() {
  return port;
 }

 public void setPort(int port) {
  this.port = port;
 }
}

@EnableConfigurationProperties注解的作用:由于自動配置類RedisAutoConfigure中,注冊jedis的bean中參數(shù)需要使用到RedisProperties的bean,但無法獲取到RedisProperties的bean,所以我們可以通過這個注解,手動的將該bean注入到IOC容器中。

在resources目錄下按照SpringBoot自動配置目錄、文件名稱的規(guī)則,如下圖,新建一個自己的spring.factories文件

spring.factories文件內(nèi)容:就是將自定義的自動配置類聲明為名稱為org.springframework.boot.autoconfigure.EnableAutoConfiguration的值,“\”的作用:換行,如果我們有多個自定義的自動配置類,這里可以用逗號分隔。

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.winson.jedis.config.RedisAutoConfigure

二、再創(chuàng)建一個SpringBoot工程redis-spring-boot-starter,引入redis-spring-boot-autoconfigure工程坐標。

<!--引入自定義的redis的starter-->
<dependency>
 <groupId>com.winson</groupId>
 <artifactId>redis-spring-boot-autoconfigure</artifactId>
 <version>0.0.1-SNAPSHOT</version>
</dependency>

三、在測試類中引入自定義的starter,并修改引導(dǎo)類,做測試

 <!--引入自定義的起步依賴-->
  <dependency>
   <groupId>com.winson</groupId>
   <artifactId>redis-spring-boot-starter</artifactId>
   <version>0.0.1-SNAPSHOT</version>
  </dependency>
//引導(dǎo)類
@SpringBootApplication
public class SpringbootEnableApplication {
 public static void main(String[] args) {
  ConfigurableApplicationContext context = SpringApplication.run(SpringbootEnableApplication.class, args);

  Jedis jedis = context.getBean(Jedis.class);
  System.out.println(jedis);
 }
}

四、啟動程序,測試結(jié)果,自定義stater成功。

下面進行redis測試

一、首先啟動本機的redis服務(wù)

二、根據(jù)測試,修改引導(dǎo)類,向redis中存儲數(shù)據(jù),并取值

@SpringBootApplication
public class SpringbootEnableApplication {

 public static void main(String[] args) {
  ConfigurableApplicationContext context = SpringApplication.run(SpringbootEnableApplication.class, args);

  Jedis jedis = context.getBean(Jedis.class);
  jedis.set("username", "dufu");

  String username = jedis.get("username");
  System.out.println("username=" + username);
 }
}

三、啟動程序,測試結(jié)果,也成功。

下面測試修改redis連接信息,測試結(jié)果

一、測試類中添加redis的配置信息(根據(jù)屬性配置類 RedisProperties 的設(shè)置進行定義),將port的連接端口,故意寫錯,如下:

redis:
 host: 127.0.0.1
 port: 6666

二、啟動程序,測試結(jié)果:發(fā)現(xiàn)無法再連接到redis服務(wù)器了,說明我們設(shè)置的屬性配置類RedisProperties 是生效的

三、如果我們將連接信息修改正確,再啟動,也是沒有問題的

最后,我們可以使用Condition將我們自定義的自動配置類完善一下,使用@ConditionalOnClass(Jedis.class)與@ConditionalOnMissingBean(name = "jedis"),具體的釋義,我就不解釋。

/**
 * @description:自定義自動配置類:將Jedis注入到IOC容器中
 * @date: 2020/10/10 15:08
 * @author: winson
 */
@Configuration
@EnableConfigurationProperties(RedisProperties.class)
@ConditionalOnClass(Jedis.class)
public class RedisAutoConfigure {
 /**
  * 提供jedis的bean
  * @param redisProperties
  * @return
  */
 @Bean
 @ConditionalOnMissingBean(name = "jedis")
 public Jedis jedis(RedisProperties redisProperties) {
  return new Jedis(redisProperties.getHost(), redisProperties.getPort());
 }
}

小結(jié):如此,我們并完成了自定義starter的示例

到此這篇關(guān)于SpringBoot自動配置之自定義starter的實現(xiàn)代碼的文章就介紹到這了,更多相關(guān)SpringBoot自定義starter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中自定義注解介紹與使用場景詳解

    Java中自定義注解介紹與使用場景詳解

    最近有所了解到自定義注解的應(yīng)用,因此學(xué)習(xí)了一下,下面這篇文章主要給大家介紹了關(guān)于Java中自定義注解介紹與使用場景的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-09-09
  • JavaSE詳細講解異常語法

    JavaSE詳細講解異常語法

    異常就是不正常,比如當我們身體出現(xiàn)了異常我們會根據(jù)身體情況選擇喝開水、吃藥、看病、等 異常處理方法。 java異常處理機制是我們java語言使用異常處理機制為程序提供了錯誤處理的能力,程序出現(xiàn)的錯誤,程序可以安全的退出,以保證程序正常的運行等
    2022-05-05
  • spring cloud Ribbon用法及原理解析

    spring cloud Ribbon用法及原理解析

    這篇文章主要介紹了spring cloud Ribbon用法及原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Java項目中如何引入Hutool工具類并正確使用它

    Java項目中如何引入Hutool工具類并正確使用它

    Hutool是一個小而全的Java工具類庫,通過靜態(tài)方法封裝,降低相關(guān)API的學(xué)習(xí)成本,提高工作效率,使Java擁有函數(shù)式語言般的優(yōu)雅,這篇文章主要給大家介紹了關(guān)于Java項目中如何引入Hutool工具類并正確使用它的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • JavaEE中用response向客戶端輸出中文數(shù)據(jù)亂碼問題分析

    JavaEE中用response向客戶端輸出中文數(shù)據(jù)亂碼問題分析

    這篇文章主要介紹了JavaEE中用response向客戶端輸出中文數(shù)據(jù)亂碼問題分析,需要的朋友可以參考下
    2014-10-10
  • 淺析Java集合及LIst接口

    淺析Java集合及LIst接口

    這篇文章主要介紹了Java集合及LIst接口,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • java生成隨機數(shù)(字符串)示例分享

    java生成隨機數(shù)(字符串)示例分享

    這篇文章主要介紹了java生成隨機數(shù)(字符串)示例分享,需要的朋友可以參考下
    2014-03-03
  • RestTemplate的URL請求示例

    RestTemplate的URL請求示例

    這篇文章主要為大家介紹了RestTemplate的URL請求示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 使用Idea簡單快速搭建springcloud項目的圖文教程

    使用Idea簡單快速搭建springcloud項目的圖文教程

    這篇文章主要介紹了使用Idea簡單快速搭建springcloud項目,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 使用Java實現(xiàn)2048小游戲代碼實例

    使用Java實現(xiàn)2048小游戲代碼實例

    這篇文章主要介紹了使用Java實現(xiàn)2048小游戲代碼實例,2048 游戲是一款益智類游戲,玩家需要通過合并相同數(shù)字的方塊,不斷合成更大的數(shù)字,最終達到2048,游戲規(guī)則簡單,但挑戰(zhàn)性很高,需要玩家靈活運用策略和計算能力,本文將使用Java代碼實現(xiàn),需要的朋友可以參考下
    2023-10-10

最新評論