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

springboot中的starter及自定義方法詳解

 更新時間:2023年11月17日 09:22:53   作者:一戶董  
這篇文章主要介紹了springboot中的starter及自定義方法詳解,Starter是Spring Boot中的一個非常重要的概念,Starter相當(dāng)于模塊,它能將模塊所需的依賴整合起來并對模塊內(nèi)的Bean根據(jù)環(huán)境(條件)進(jìn)行自動配置,需要的朋友可以參考下

1:官方提供的starter

在spring-boot-autocongure包中定義了官方提供的一百多個starter,如下:

在這里插入圖片描述

2:框架是如何定義starter的?

因?yàn)閟pringboot的普及度逐步提高,一些沒有被官方實(shí)現(xiàn)提供為starter的框架,也會自己實(shí)現(xiàn)一個starter供用戶使用,這里以shardingsphere ,clone之后使用操作git checkout -b 5.0.0-alpha-local 5.0.0-alpha創(chuàng)建分支,然后在如下目錄查看starter配置:

$ pwd
/d/test/sharding-sphere/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter

截圖如下:

在這里插入圖片描述

spring.provider內(nèi)容如下:

provides: shardingsphere-jdbc-spring-boot-starter

additional-spring-configuration-metadata.json內(nèi)容如下:

{
  "groups": [
    {
      "name": "spring.shardingsphere.datasource",
      "type": "org.apache.shardingsphere.spring.boot.SpringBootConfiguration"
    },
    ...
}

其中比較重要的是spring.factories和自動配置類SpringBootConfiguration,spring.factories如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.apache.shardingsphere.spring.boot.SpringBootConfiguration

其中只定義了自動配置類,自動配置類如下:

@Configuration // 代表是一個Java config類
@ComponentScan("org.apache.shardingsphere.spring.boot.converter") // 配置掃描路徑,會掃描并注冊相關(guān)spring bean
@EnableConfigurationProperties(SpringBootPropertiesConfiguration.class) // 啟用屬性類,封裝了外部配置文件信息
@ConditionalOnProperty(prefix = "spring.shardingsphere", name = "enabled", havingValue = "true", matchIfMissing = true) // 當(dāng)spring.shardingsphere.enabled 配置項(xiàng)等于true時,加載該自動配置類
@AutoConfigureBefore(DataSourceAutoConfiguration.class) // 在DataSourceAutoConfiguration自動配置類之前配置
@RequiredArgsConstructor // lombok注解
public class SpringBootConfiguration implements EnvironmentAware {
    // 屬性類,會自動注入進(jìn)來
    private final SpringBootPropertiesConfiguration props;
    
    private final Map<String, DataSource> dataSourceMap = new LinkedHashMap<>();
    
    // 核心,創(chuàng)建shardingsphere
    @Bean
    @Autowired(required = false)
    public DataSource shardingSphereDataSource(final ObjectProvider<List<RuleConfiguration>> rules) throws SQLException {
        Collection<RuleConfiguration> ruleConfigurations = Optional.ofNullable(rules.getIfAvailable()).orElse(Collections.emptyList());
        return ShardingSphereDataSourceFactory.createDataSource(dataSourceMap, ruleConfigurations, props.getProps());
    }
    
    // 創(chuàng)建spring bean ShardingTransactionTypeScanner
    @Bean
    public ShardingTransactionTypeScanner shardingTransactionTypeScanner() {
        return new ShardingTransactionTypeScanner();
    }
    
    // 感知上下文對象,因?yàn)樽詣优渲妙惐旧硪彩且粋€spring bean,所以這里可以這樣子用
    @Override
    public final void setEnvironment(final Environment environment) {
        dataSourceMap.putAll(DataSourceMapSetter.getDataSourceMap(environment));
    }
}

使用也比較簡單,和引入普通的jar包相同,在需要的項(xiàng)目里引入其GAV即可,最終springboot會掃描到spring.facatories,并加載其中的組件,當(dāng)然最重要的自然是自動配置類了,接下來我們仿照shardingsphere 的starter來自定義一個starter。

3:自定義starter

3.1:自定義starter

首先我們來定義屬性類,如下:

@ConfigurationProperties(prefix = "info")
@Getter
@Setter
public class HelloProperties {
//    private Properties prop = new Properties();

    private String name;
}

即接收的配置的前綴是info,這里的name屬性配置中就可能是info.name=xxxx,接著我們來定義一個我們的starter能夠提供的類Spokesman,該類的功能就是會說話,因此,使用了我們starter就能擁有一個會spoke的man,如下:

@AllArgsConstructor
public class Spokesman {
    private String name;

    public String speak() {
        System.out.println("你好,向大家介紹:" + name);
        return name;
    }
}

接著就可以定義最重要的自動配置類了,如下:

@Configuration
@EnableConfigurationProperties(HelloProperties.class)
@ConditionalOnExpression // 默認(rèn)為true,即默認(rèn)加載
@AllArgsConstructor
public class HelloAutoConfiguration implements InitializingBean {
    private final HelloProperties props;

    // 創(chuàng)建 Spokesman 的 spring bean
    @Bean
    public Spokesman createSpokesman() {
        return new Spokesman(props.getName());
    }

    // 僅僅為了打印props,沒有其他特殊用途
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("props isss: " + props.getName());
    }
}

但此時,我們的自動配置類還不能加入到springboot的體系中,還需要在META-INF下創(chuàng)建spring.factories文件,如下:

在這里插入圖片描述

3.2:使用自定義starter

starter其實(shí)也就是一個普通的maven依賴,所以我們想要使用的話,首先需要引入其對應(yīng)的GAV,這里如下:

<dependency>
    <groupId>dongshi.daddy</groupId>
    <artifactId>hello-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

接著我們提供starter需要的配置信息,如下:

info:
  name: 甜甜的葡萄干

接著我們就可以獲取starter提供的SpokeMan來spoke了,如下:

@Resource
private Spokesman spokesman;

@RequestMapping("/starter")
@ResponseBody
public String starter() {
    System.out.println("starter ...");
    return spokesman.speak();
}

運(yùn)行main,如果是在console看到如下輸出,則說明starter已經(jīng)使用成功了:

2023-07-03 21:01:56.508  INFO 3011 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2355 ms
props isss: 甜甜的葡萄干
...

接著我們就可以訪問//localhost:8899/my/starter了:

在這里插入圖片描述

到此這篇關(guān)于springboot中的starter及自定義方法詳解的文章就介紹到這了,更多相關(guān)springboot中的starter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • minio安裝部署及使用的詳細(xì)過程

    minio安裝部署及使用的詳細(xì)過程

    MinIO是一個基于Apache?License?v2.0開源協(xié)議的對象存儲服務(wù),下面這篇文章主要給大家介紹了關(guān)于minio安裝部署及使用的詳細(xì)過程,文中通過實(shí)例代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Netty啟動流程注冊多路復(fù)用源碼解析

    Netty啟動流程注冊多路復(fù)用源碼解析

    這篇文章主要介紹了Netty啟動流程注冊多路復(fù)用源碼分析,繼續(xù)分析channel是如何注冊到selector中的,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • Java利用StampedLock實(shí)現(xiàn)讀寫鎖的方法詳解

    Java利用StampedLock實(shí)現(xiàn)讀寫鎖的方法詳解

    在jdk8以后,java提供了一個性能更優(yōu)越的讀寫鎖并發(fā)類StampedLock,該類的設(shè)計(jì)初衷是作為一個內(nèi)部工具類,用于輔助開發(fā)其它線程安全組件。本文就來和大家一起學(xué)習(xí)下StampedLock的功能和使用
    2022-10-10
  • Spring Security基于數(shù)據(jù)庫的ABAC屬性權(quán)限模型實(shí)戰(zhàn)開發(fā)教程

    Spring Security基于數(shù)據(jù)庫的ABAC屬性權(quán)限模型實(shí)戰(zhàn)開發(fā)教程

    這篇文章主要介紹了Spring Security基于數(shù)據(jù)庫的ABAC屬性權(quán)限模型實(shí)戰(zhàn)開發(fā)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2025-04-04
  • RestTemplate如何使用JSON發(fā)送Post請求

    RestTemplate如何使用JSON發(fā)送Post請求

    這篇文章主要介紹了RestTemplate如何使用JSON發(fā)送Post請求問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java中的SPI機(jī)制案例分享

    Java中的SPI機(jī)制案例分享

    這篇文章主要介紹了Java中的SPI機(jī)制案例分享,文章基于Java的相關(guān)資料展開SPI的詳細(xì)介紹,SPI的全稱是Service?Provider?Interface,服務(wù)提供者接口,下文更多相關(guān)內(nèi)容介紹需要的小伙伴可以參考一下
    2022-04-04
  • SpringMVC中的常用注解和用法舉例詳解

    SpringMVC中的常用注解和用法舉例詳解

    在Spring和SpringMVC中,注解的使用大大簡化了配置,提高了代碼的可讀性和可維護(hù)性,這篇文章主要給大家介紹了關(guān)于SpringMVC中常用注解和用法的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • SpringBoot中緩存@Cacheable出錯的問題解決

    SpringBoot中緩存@Cacheable出錯的問題解決

    本文主要介紹了SpringBoot中緩存@Cacheable出錯的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-10-10
  • Java使用aspose實(shí)現(xiàn)pdf轉(zhuǎn)word

    Java使用aspose實(shí)現(xiàn)pdf轉(zhuǎn)word

    Aspose是一套強(qiáng)大的文檔處理工具,被超過80%的財(cái)富100強(qiáng)公司信賴,用于在應(yīng)用程序中創(chuàng)建、編輯、導(dǎo)出和轉(zhuǎn)換100多種文件格式,本文將給大家介紹Java使用aspose實(shí)現(xiàn)pdf轉(zhuǎn)word的操作方法,需要的朋友可以參考下
    2025-02-02
  • springboot之使用logback日志框架的圖文教程

    springboot之使用logback日志框架的圖文教程

    這篇文章主要介紹了springboot之使用logback日志框架的圖文教程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評論

琼结县| 陵川县| 河南省| 炉霍县| 临武县| 葫芦岛市| 德保县| 湾仔区| 丰县| 阿勒泰市| 赣州市| 渭南市| 杭锦后旗| 蓝山县| 板桥市| 磐安县| 十堰市| 青田县| 南京市| 安乡县| 翁源县| 武陟县| 闽侯县| 平度市| 泸州市| 邵阳县| 四子王旗| 横峰县| 克山县| 历史| 柳林县| 谷城县| 旅游| 汕头市| 右玉县| 广水市| 沙洋县| 巴中市| 盖州市| 华蓥市| 界首市|