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

spring?boot3自動(dòng)配置與手動(dòng)配置的全過(guò)程

 更新時(shí)間:2026年01月29日 08:47:34   作者:NE_STOP  
本文給大家介紹了spring?boot3自動(dòng)配置與手動(dòng)配置的全過(guò)程,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

springboot自動(dòng)配置

自動(dòng)配置了大量組件,配置信息可以在application.properties文件中修改。

當(dāng)添加了特定的Starter POM后,springboot會(huì)根據(jù)類路徑上的jar包來(lái)自動(dòng)配置bean(比如:springboot發(fā)現(xiàn)類路徑上的MyBatis相關(guān)類,springboot會(huì)自動(dòng)配置MyBatis相關(guān)的bean)。

springboot使用默認(rèn)配置來(lái)設(shè)置這些功能,開(kāi)發(fā)人員也可以自定義配置來(lái)覆蓋默認(rèn)配置。

這些配置信息如何生效的?

通過(guò)@ConfigurationProperties注解將配置信息注入到組件中的屬性類的。屬性類一般以Properties結(jié)尾。比如tomcat組件的ServerProperties類,就是將配置信息中server開(kāi)頭的配置注入到屬性中,比如server.port=8080會(huì)被綁定到屬性中

@ConfigurationProperties("server")
public class ServerProperties {
    private @Nullable Integer port;
    private @Nullable InetAddress address;
  .....
}

自動(dòng)配置是按需加載的

springboot提供很多自動(dòng)配置類,這些自動(dòng)配置不是全部生效,它是按需加載的,導(dǎo)入了哪個(gè)啟動(dòng)器,則該啟動(dòng)器對(duì)應(yīng)的配置類才會(huì)被加載。

任何啟動(dòng)器都會(huì)關(guān)聯(lián)一個(gè)啟動(dòng)器:spring-boot-Starter,它是springboot框架最核心的啟動(dòng)器。

spring-boot-Starter又關(guān)聯(lián)引入spring-boot-auto從figure。所有的自動(dòng)配置類都在這里。

自動(dòng)配置類用來(lái)創(chuàng)建相應(yīng)的組件。

按需加載如何實(shí)現(xiàn)?

使用條件注解可以實(shí)現(xiàn)按需加載。

條件注解基于某些條件決定是否應(yīng)該創(chuàng)建一個(gè)bean。這些注解通常用在自動(dòng)配置類上,以確保只有在特定條件滿足時(shí)才會(huì)應(yīng)用相應(yīng)的配置。

條件注解可以用在類上,也可以用在方法上。

常見(jiàn)的條件注解有:

  • @ConditionalOnClass 指定類存在時(shí)才創(chuàng)建bean
  • @ConditionalOnMissingClass 指定類不存在時(shí)才創(chuàng)建bean
  • @ConditionalOnBean 容器中存在指定bean時(shí)才創(chuàng)建bean
  • @ConditionalOnMissingBean 容器中不存在指定bean時(shí)才創(chuàng)建bean
  • @ConditionalOnProperty 配置文件中存在指定屬性時(shí),才創(chuàng)建bean
  • @ConditionalOnResource 指定資源存在時(shí)才創(chuàng)建bean
  • @ConditionalOnWebApplication 應(yīng)用程序是Web應(yīng)用時(shí)才創(chuàng)建bean
  • @ConditionalOnNotWebApplication 應(yīng)用程序不是Web應(yīng)用時(shí)才創(chuàng)建bean

修改默認(rèn)的包掃描規(guī)則

修改掃描規(guī)則有2種方式:

在主入口類上添加以下注解的任意一個(gè)都可以修改包掃描規(guī)則(掃描com包及其子孫包)

@ComponentScan("com")
@SpringBootApplication(scanBasePackages = "com")

自動(dòng)配置的實(shí)現(xiàn)原理

  • 程序從main方法開(kāi)始執(zhí)行,主入口類上使用@SpringBootApplication進(jìn)行標(biāo)注
  • @SpringBootApplication是復(fù)合注解,代表以下三個(gè)注解的功能
  • a. @SpringBootConfiguration:它被@Configuration標(biāo)注。表明主入口類是一個(gè)配置類,此時(shí)該配置開(kāi)始加載。
  • b. @ComponentScan 默認(rèn)掃描主入口類所在包及其子孫包,因此spring-boot-autoconfigure 自動(dòng)配置類是無(wú)法加載的,那么這些自動(dòng)配置類又是怎么生效的呢?
  • c. @EnableAutoConfiguration 該注解的作用就是啟用自動(dòng)配置
  • @EnableAutoConfiguration 被@Import({AutoConfigurationImportSelector.class})標(biāo)注

? @Import({AutoConfigurationImportSelector.class})的作用是將AutoConfigurationImportSelector作為一個(gè)bean加載到Ioc容器中

? 這個(gè)bean的作用是:負(fù)責(zé)收集和選擇所有符合條件的自動(dòng)配置類。

總結(jié)

  • 運(yùn)行環(huán)境準(zhǔn)備階段
    • 引入Web啟動(dòng)器
    • 最終傳遞引入了自動(dòng)配置的jar包
    • 自動(dòng)配置的jar包中有152個(gè)自動(dòng)配置類,到此運(yùn)行環(huán)境準(zhǔn)備完畢
  • 運(yùn)行階段
    • @EnableAutoConfiguration 啟用自動(dòng)配置,將152個(gè)自動(dòng)配置類全部加載到Ioc容器中。然后根據(jù)開(kāi)發(fā)場(chǎng)景篩選出必須得自動(dòng)配置類
    • 自動(dòng)配置類加載了很多組件
    • 每個(gè)組件需要的數(shù)據(jù)來(lái)自屬性類
    • 屬性類的屬性來(lái)自配置文件

總之一句話。導(dǎo)入啟動(dòng)器,修改配置文件。就可以完成對(duì)應(yīng)功能的開(kāi)發(fā)。

springmvc配置

# 讓springboot的靜態(tài)資源處理失效
spring.web.resources.add-mappings=false
# 配置靜態(tài)資源的訪問(wèn)URL
spring.mvc.static-path-pattern=/**
#  靜態(tài)資源文件存儲(chǔ)位置默認(rèn)配置
spring.web.resources.static-locations=classpath:/META-INF/resources/, classpath:/resources/, classpath:/static/, classpath:/public/

springboot對(duì)靜態(tài)資源是如何處理的?

什么樣的URL ?訪問(wèn)哪個(gè)位置上的資源文件?

webjars

webjars是現(xiàn)在前后端分離中比較重要的一種靜態(tài)資源打包方式。

webjars是一種常用的前端庫(kù)(如jQuery)打包成jar包的形式,方便在java程序中使用。

webjars提供了一種標(biāo)準(zhǔn)化的方式來(lái)管理前端庫(kù),使其更容易集成到j(luò)ava項(xiàng)目中,并且可以利用Maven的依賴管理功能。

<!--        webjars,將前端庫(kù)打成jar包-->
        <dependency>
            <groupId>org.webjars.npm</groupId>
            <artifactId>vue</artifactId>
            <version>3.5.12</version>
        </dependency>

默認(rèn)規(guī)則是:當(dāng)請(qǐng)求路徑是/wbjars/**,則會(huì)去classpath:/MEAT-INF/resources/webjars/找。

靜態(tài)資源緩存處理

靜態(tài)資源緩存是指瀏覽器的緩存行為,瀏覽器可以緩存(js、CSS、圖片、聲音、視頻)到瀏覽器中,下一次用戶訪問(wèn)同樣的資源就直接從緩存中獲取,不再?gòu)姆?wù)器獲取,這樣能減少服務(wù)器壓力,提高相應(yīng)效率。

可以通過(guò)配置來(lái)修改默認(rèn)的緩存機(jī)制。

#靜態(tài)資源緩存設(shè)置
#緩存有效期設(shè)置
spring.web.resources.cache.period=3600
# 緩存控制設(shè)置
spring.web.resources.cache.cachecontrol.max-age=20
# 是否啟用最后一次修改時(shí)間的比對(duì)
spring.web.resources.cache.use-last-modified=true

靜態(tài)index.html的支持

spring會(huì)自動(dòng)處理位于靜態(tài)資源目錄下的index.html(文件名必須是index.html),使其成為應(yīng)用程序的主頁(yè)。

注意:此時(shí)不能配置靜態(tài)資源訪問(wèn)url(spring.mvc.static-path-pattern),必須使用默認(rèn)的配置

favicon.ico

將favicon.ico放在靜態(tài)資源根目錄下,就會(huì)自動(dòng)生效。

spring boot的web手動(dòng)配置(靜態(tài)資源處理)

編寫代碼的方式

第一種方式 實(shí)現(xiàn)WebMvcConfigurer接口

// 添加這個(gè)注解后,表示不再使用springboot提供的默認(rèn)配置
// @EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {
    // 靜態(tài)資源處理需要重寫的方法
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 使用注冊(cè)器registry 綁定 pathPatterns 以及真實(shí)的靜態(tài)資源文件存儲(chǔ)路徑
        registry.addResourceHandler("/abc/**") // 配置路徑訪問(wèn)模式
                .addResourceLocations("classpath:/static1/", "classpath:/static2/", "classpath:/static3/"); // 配置靜態(tài)資源路徑
    }
}

第二種方式

@Configuration
public class WebConfig2 {
    @Bean
    public WebMvcConfigurer addResourceHandlers() {
        return new WebMvcConfigurer() {
            @Override
            public void addResourceHandlers(ResourceHandlerRegistry registry) {
                registry.addResourceHandler("/abc/**") // 配置路徑訪問(wèn)模式
                        .addResourceLocations("classpath:/static1/", "classpath:/static2/", "classpath:/static3/"); // 配置靜態(tài)資源路徑
            }
        };
    }
}

web請(qǐng)求的路徑匹配

# 前端請(qǐng)求的url 匹配到controller中的某個(gè)方法
# 使用ant風(fēng)格的路徑匹配規(guī)則,默認(rèn)值是path_pattern_matcher
# path_pattern_matcher兼容且支持ant風(fēng)格
# 在ant風(fēng)格中** 可以出現(xiàn)在任何位置,但在path_pattern_matcher風(fēng)格中,** 只能出現(xiàn)在末尾
# spring6 下的ant風(fēng)格 ** 也只能出現(xiàn)在末尾
spring.mvc.pathmatch.matching-strategy=ant_path_matcher

到此這篇關(guān)于spring boot3自動(dòng)配置與手動(dòng)配置的文章就介紹到這了,更多相關(guān)spring boot自動(dòng)配置與手動(dòng)配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實(shí)現(xiàn)字符與Unicode碼轉(zhuǎn)換(附源碼)

    java實(shí)現(xiàn)字符與Unicode碼轉(zhuǎn)換(附源碼)

    在 Java 開(kāi)發(fā)中,經(jīng)常需要在字符(char 或 String)與其對(duì)應(yīng)的Unicode 碼點(diǎn)(int)之間進(jìn)行相互轉(zhuǎn)換,下面小編就來(lái)和大家詳細(xì)介紹一下具體實(shí)現(xiàn)方法吧
    2025-07-07
  • spring?boot?Slf4j日志框架的體系結(jié)構(gòu)詳解

    spring?boot?Slf4j日志框架的體系結(jié)構(gòu)詳解

    在項(xiàng)目開(kāi)發(fā)中記錄日志是必做的一件事情,springboot內(nèi)置了slf4j日志框架,下面這篇文章主要給大家介紹了關(guān)于spring?boot?Slf4j日志框架的體系結(jié)構(gòu),需要的朋友可以參考下
    2022-05-05
  • 淺析Java中接口和抽象類的七大區(qū)別

    淺析Java中接口和抽象類的七大區(qū)別

    Java 是一門面向?qū)ο蟮木幊陶Z(yǔ)言,面向?qū)ο蟮木幊陶Z(yǔ)言有四大特征:抽象、封裝、繼承和多態(tài)。本文介紹的接口和抽象類就是面向?qū)ο缶幊讨小俺橄蟆钡木唧w實(shí)現(xiàn)。本文也將為大家詳細(xì)講一下二者的區(qū)別,需要的可以參考一下
    2021-12-12
  • Mybatis引入與使用的圖文步驟

    Mybatis引入與使用的圖文步驟

    本文主要介紹了Mybatis引入與使用的圖文步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • SpringMVC攔截器——實(shí)現(xiàn)登錄驗(yàn)證攔截器的示例代碼

    SpringMVC攔截器——實(shí)現(xiàn)登錄驗(yàn)證攔截器的示例代碼

    本篇文章主要介紹了SpringMVC攔截器——實(shí)現(xiàn)登錄驗(yàn)證攔截器的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • 將原生JDBC封裝實(shí)現(xiàn)CRUD的案例

    將原生JDBC封裝實(shí)現(xiàn)CRUD的案例

    這篇文章主要介紹了將原生JDBC封裝實(shí)現(xiàn)CRUD的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • springboot layui hutool Excel導(dǎo)入的實(shí)現(xiàn)

    springboot layui hutool Excel導(dǎo)入的實(shí)現(xiàn)

    本文主要介紹了springboot layui hutool Excel導(dǎo)入的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • 基于Apache組件分析對(duì)象池原理的實(shí)現(xiàn)案例分析

    基于Apache組件分析對(duì)象池原理的實(shí)現(xiàn)案例分析

    本文從對(duì)象池的一個(gè)簡(jiǎn)單案例切入,主要分析common-pool2組件關(guān)于:池、工廠、配置、對(duì)象管理幾個(gè)角色的源碼邏輯,并且參考其在Redis中的實(shí)踐,對(duì)Apache組件分析對(duì)象池原理相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-04-04
  • Springboot異常日志輸出方式

    Springboot異常日志輸出方式

    這篇文章主要介紹了Springboot異常日志輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java同步容器和并發(fā)容器詳解

    Java同步容器和并發(fā)容器詳解

    這篇文章主要介紹了Java同步容器和并發(fā)容器詳解,容器是Java基礎(chǔ)類庫(kù)中使用頻率最高的一部分,Java集合包中提供了大量的容器類來(lái)幫組我們簡(jiǎn)化開(kāi)發(fā),下面小編和大家來(lái)一起學(xué)習(xí)下吧
    2019-06-06

最新評(píng)論

托克逊县| 游戏| 镇远县| 道孚县| 公主岭市| 班戈县| 嘉荫县| 娄烦县| 金平| 鄯善县| 阳泉市| 和硕县| 清远市| 南雄市| 资中县| 如东县| 行唐县| 外汇| 巩义市| 江永县| 南汇区| 哈尔滨市| 山西省| 慈溪市| 尼木县| 杨浦区| 宁陵县| 安岳县| 陇川县| 永和县| 隆化县| 淳安县| 泰来县| 武城县| 嘉祥县| 安吉县| 宝清县| 阿勒泰市| 新郑市| 锡林浩特市| 靖西县|