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

SpringBoot自動配置與啟動流程詳細分析

 更新時間:2022年11月05日 09:53:10   作者:OlaiolaiO  
這篇文章主要介紹了SpringBoot自動配置原理分析,SpringBoot是我們經(jīng)常使用的框架,那么你能不能針對SpringBoot實現(xiàn)自動配置做一個詳細的介紹。如果可以的話,能不能畫一下實現(xiàn)自動配置的流程圖。牽扯到哪些關(guān)鍵類,以及哪些關(guān)鍵點

一、自動配置

主啟動類

//@SpringBootApplication 來標注一個主程序類
//說明這是一個Spring Boot應(yīng)用
@SpringBootApplication
public class SpringbootApplication {
   public static void main(String[] args) {
     //以為是啟動了一個方法,沒想到啟動了一個服務(wù)
      SpringApplication.run(SpringbootApplication.class, args);
   }
}

@SpringBootApplocation注解內(nèi)部

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
    // ......
}

1. @ComponentScan

這個注解在Spring中很重要,它對應(yīng)XML配置中的元素。

作用:自動掃描并加載符合條件的組件或者bean,將這個bean定義加載到IOC容器中。

2. @SpringBootConfiguration

作用:SpringBoot的配置類,標注在某個類上,表示這是一個SpringBoot的配置類;

@Configuration 作用:允許在上下文中注冊額外的bean或倒入其他配置類

//@SpringBootConfiguration注解內(nèi)部
//這里的 @Configuration,說明這是一個配置類 ,配置類就是對應(yīng)Spring的xml 配置文件;
@Configuration
public @interface SpringBootConfiguration {}
//里面的 @Component 這就說明,啟動類本身也是Spring中的一個組件而已,負責啟動應(yīng)用
@Component
public @interface Configuration {}

3. @EnableAutoConfigeration

作用:啟用SpringBoot的自動配置機制

import java.lang.annotation. Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Import;
@Target({ElementTypeTYPE})
@Retention(RetentionPolicy.RUNTIME)@Documented
@Inherited
@AutoconfigurationPackage
@Import( {AutoconfigurationImportselector.class})
public @interface EnableAutoconfiguration{
    string ENABLED_OVERRIDE_PROPERTY ="spring.boot.enableautoconfiguration" ;
    class<?>[]exclude() default {};
    string[ ] excludeName( ) default {};
}

@AutoConfigurationPackage :自動配置包

//AutoConfigurationPackage的子注解
//Registrar.class 作用:將主啟動類的所在包及包下面所有子包里面的所有組件掃描到Spring容器 
@Import({Registrar.class})
public @interface AutoConfigurationPackage {
}

@EnableAutoConfigeration 注解通過Spring提供的 @Import 注解導(dǎo)入了 AutoConfigurationImportSelector 類; AutoConfigurationImportSelector 類中 getCandidateConfigurations 方法會將所有自動配置類的信息以List的形式返回,這些配置信息會被Spring容器作Bean來管理。

 protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
    }

4. @Condition

在Spring 4.0 增加的條件判斷功能,通過這個可以功能可以實現(xiàn)選擇性的創(chuàng)建 Bean 操作。

  • ConditionalOnProperty:判斷配置文件中是否有對應(yīng)屬性和值才初始化Bean
  • ConditionalOnClass:判斷環(huán)境中是否有對應(yīng)字節(jié)碼文件才初始化Bean
  • ConditionalOnMissingBean:判斷環(huán)境中沒有對應(yīng)Bean才初始化Bean
  • ConditionalOnBean:判斷環(huán)境中有對應(yīng)Bean才初始化Bean

以上注解在springBoot-autoconfigure的condition包下。

總結(jié)原理

  • @EnableAutoConfiguration 注解內(nèi)部使用 @Import(AutoConfigurationImportSelector.class)來加載配置類;
  • 配置文件位置:META-INF/spring.factories,該配置文件中定義了大量的配置類,當 SpringBoot 應(yīng)用啟動時,會自動加載這些配置類,初始化Bean;
  • 并不是所有的Bean都會被初始化,在配置類中使用Condition來加載滿足條件的Bean。

啟動流程

  • 基于SpringBoot開發(fā)的項目中都會有一個@SpringBootApplication注解配置的啟動類,啟動類中會有一個main()方法作為啟動入口,main()方法中調(diào)用SpringApplication.run(),開始啟動整個SpringBoot應(yīng)用程序;
  • SpringApplication.run()方法中,首先進行初始化,創(chuàng)建SpringApplication對象,通過它的構(gòu)造方法,完成初始化,讀取自動配置核心類;
  • 通過執(zhí)行SpringApplication對象的run()方法,完成SpringBoot應(yīng)用程序的啟動邏輯:啟動流程的監(jiān)聽、配置環(huán)境、打印啟動Banner、創(chuàng)建Spring容器、記錄啟動時間、執(zhí)行Runner(ApplicationRunner和CommandLineRunner)等啟動步驟。

到此這篇關(guān)于SpringBoot自動配置與啟動流程詳細分析的文章就介紹到這了,更多相關(guān)SpringBoot自動配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringMVC后端Controller頁面跳轉(zhuǎn)的三種方式匯總

    SpringMVC后端Controller頁面跳轉(zhuǎn)的三種方式匯總

    這篇文章主要介紹了SpringMVC后端Controller頁面跳轉(zhuǎn)的三種方式匯總,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • SpringBoot使用minio進行文件管理的流程步驟

    SpringBoot使用minio進行文件管理的流程步驟

    MinIO 是一個高性能的對象存儲系統(tǒng),兼容 Amazon S3 API,該軟件設(shè)計用于處理非結(jié)構(gòu)化數(shù)據(jù),如圖片、視頻、日志文件以及備份數(shù)據(jù)等,本文給大家介紹了SpringBoot使用minio進行文件管理的流程步驟,需要的朋友可以參考下
    2025-01-01
  • 使用Java實現(xiàn)類似Comet風格的web app

    使用Java實現(xiàn)類似Comet風格的web app

    這篇文章主要介紹了使用Java實現(xiàn)類似Comet風格的web app的方法,包括客戶端的響應(yīng)和XML解析等功能,需要的朋友可以參考下
    2015-11-11
  • SpringBoot Mybatis Plus公共字段自動填充功能

    SpringBoot Mybatis Plus公共字段自動填充功能

    這篇文章主要介紹了SpringBoot Mybatis Plus公共字段自動填充功能的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • mybatis項目兼容mybatis-plus問題

    mybatis項目兼容mybatis-plus問題

    這篇文章主要介紹了mybatis項目兼容mybatis-plus問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 在webservice里調(diào)用耗時方法出錯的解決方案

    在webservice里調(diào)用耗時方法出錯的解決方案

    這篇文章主要介紹了在webservice里調(diào)用耗時方法出錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 最新評論

    阜宁县| 朝阳市| 荥经县| 左云县| 石城县| 苍梧县| 武威市| 辉南县| 金山区| 鹤岗市| 黄骅市| 蓬溪县| 林周县| 陆川县| 泌阳县| 朝阳县| 保山市| 自贡市| 唐山市| 长寿区| 溧阳市| 泾川县| 玉山县| 东城区| 金寨县| 冷水江市| 浦东新区| 长宁县| 额敏县| 黔西县| 八宿县| 定州市| 西青区| 巴林右旗| 偃师市| 宜宾县| 青川县| 渝中区| 威宁| 交口县| 昂仁县|