亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot自動(dòng)配置特點(diǎn)與原理詳細(xì)分析

 更新時(shí)間:2022年08月16日 16:58:22   作者:崇令  
這篇文章主要介紹了SpringBoot自動(dòng)配置原理分析,SpringBoot是我們經(jīng)常使用的框架,那么你能不能針對(duì)SpringBoot實(shí)現(xiàn)自動(dòng)配置做一個(gè)詳細(xì)的介紹。如果可以的話,能不能畫一下實(shí)現(xiàn)自動(dòng)配置的流程圖。牽扯到哪些關(guān)鍵類,以及哪些關(guān)鍵點(diǎn)

一、SpringBoot是什么

Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過(guò)程。

在Spring框架這個(gè)大家族中,產(chǎn)生了很多衍生框架,比如 Spring、SpringMvc框架等,Spring的核心內(nèi)容在于控制反轉(zhuǎn)(IOC)和依賴注入(DI),所謂控制反轉(zhuǎn)并非是一種技術(shù),而是一種思想,在操作方面是指在spring配置文件中創(chuàng)建<bean>,依賴注入即為由spring容器為應(yīng)用程序的某個(gè)對(duì)象提供資源,比如 引用對(duì)象、常量數(shù)據(jù)等。

在Spring框架這個(gè)大家族中,產(chǎn)生了很多衍生框架,比如 Spring、SpringMvc框架等,Spring的核心內(nèi)容在于控制反轉(zhuǎn)(IOC)和依賴注入(DI),所謂控制反轉(zhuǎn)并非是一種技術(shù),而是一種思想,在操作方面是指在spring配置文件中創(chuàng)建<bean>,依賴注入即為由spring容器為應(yīng)用程序的某個(gè)對(duì)象提供資源,比如 引用對(duì)象、常量數(shù)據(jù)等。

二、SpringBoot的特點(diǎn)(核心功能)

  • 可獨(dú)立運(yùn)行的Spring項(xiàng)目:Spring Boot可以以jar包的形式獨(dú)立運(yùn)行。
  • 內(nèi)嵌的Servlet容器:Spring Boot可以選擇內(nèi)嵌Tomcat、Jetty或者Undertow,無(wú)須以war包形式部署項(xiàng)目。
  • 簡(jiǎn)化的Maven配置:Spring提供推薦的基礎(chǔ) POM 文件來(lái)簡(jiǎn)化Maven 配置。
  • 自動(dòng)配置Spring:Spring Boot會(huì)根據(jù)項(xiàng)目依賴來(lái)自動(dòng)配置Spring 框架,極大地減少項(xiàng)目要使用的配置。
  • 提供生產(chǎn)就緒型功能:提供可以直接在生產(chǎn)環(huán)境中使用的功能,如性能指標(biāo)、應(yīng)用信息和應(yīng)用健康檢查。
  • 無(wú)代碼生成和xml配置:Spring Boot不生成代碼。完全不需要任何xml配置即可實(shí)現(xiàn)Spring的所有配置。

SpringBoot最明顯的特點(diǎn)是,讓文件配置變的相當(dāng)簡(jiǎn)單、讓應(yīng)用部署變的簡(jiǎn)單(SpringBoot內(nèi)置服務(wù)器,并裝備啟動(dòng)類代碼),可以快速開啟一個(gè)Web容器進(jìn)行開發(fā)。

三、SpringBoot的自動(dòng)配置原理

Spring Boot的啟動(dòng)類上有一個(gè)@SpringBootApplication注解,這個(gè)注解是Spring Boot項(xiàng)目必不可少的注解。

1. @SpringBootApplication

作用:SpringBoot的核心注解,標(biāo)注在某個(gè)類上說(shuō)明這個(gè)類是SpringBoot的主配置類 , SpringBoot就應(yīng)該運(yùn)行這個(gè)類的main方法來(lái)啟動(dòng)SpringBoot應(yīng)用

@SpringBootApplication
public class Springboot01Application {
    public static void main(String[] args) {
       SpringApplication.run(Springboot01Application.class, args);
    }
}

它的本質(zhì)是一個(gè)組合注解,我們點(diǎn)進(jìn)去查看該類的元信息主要包含3個(gè)注解:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)

2. @SpringBootConfiguration

作用:SpringBoot的配置類 ,標(biāo)注在某個(gè)類上 , 表示這是一個(gè)SpringBoot的配置類;我們繼續(xù)進(jìn)去這個(gè)注解查看源碼:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
@Indexed
public @interface SpringBootConfiguration {
    @AliasFor(
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}

@Configuration標(biāo)注在某個(gè)類上,表示這是一個(gè) springboot的配置類。可以向容器中注入組件。

3. @EnableAutoConfiguration

作用:開啟自動(dòng)配置功能

以前我們需要配置的東西,Spring Boot幫我們自動(dòng)配置;@EnableAutoConfiguration告訴SpringBoot開啟自動(dòng)配置功能;這樣自動(dòng)配置才能生效;

點(diǎn)進(jìn)注解接續(xù)查看:

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

@AutoConfigurationPackage:自動(dòng)配置包

@Import({AutoConfigurationImportSelector.class}):Spring底層注解@import , 給容器中導(dǎo)入一個(gè)組件,導(dǎo)入的組件由AutoConfigurationPackages.Registrar.class這個(gè)類來(lái)指定

①利用getAutoConfigurationEntry(annotationMetadata);給容器中批量導(dǎo)入一些組件;

②調(diào)用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)獲取到所有需要導(dǎo)入到容器中的配置類;

③利用工廠加載 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的組件;

④從META-INF/spring.factories位置來(lái)加載一個(gè)文件。默認(rèn)掃描我們當(dāng)前系統(tǒng)里面所有META-INF/spring.factories位置的文件。

4. @ComponentScan

作用:自動(dòng)掃描組件,默認(rèn)掃描該類所在包及其子包下所有帶有指定注解的類,將它們自動(dòng)裝配到bean容器中,會(huì)被自動(dòng)裝配的注解包括@Controller、@Service、@Component、@Repository等。也可以指定掃描路徑。

四、核心原理圖

簡(jiǎn)單來(lái)說(shuō),Spring Boot通過(guò)@EnableAutoConfiguration注解開啟自動(dòng)配置,對(duì)jar包下的spring.factories文件進(jìn)行掃描,這個(gè)文件中包含了可以進(jìn)行自動(dòng)配置的類,當(dāng)滿足@Condition注解指定的條件時(shí),便在依賴的支持下進(jìn)行實(shí)例化,注冊(cè)到Spring容器中。

五、常用的Conditional注解

在加載自動(dòng)配置類的時(shí)候,并不是將spring.factories的配置全部加載進(jìn)來(lái),而是通過(guò)@Conditional等注解的判斷進(jìn)行動(dòng)態(tài)加載;

@Conditional其實(shí)是spring底層注解,意思就是根據(jù)不同的條件,來(lái)進(jìn)行自己不同的條件判斷,如果滿足指定的條件,那么配置類里邊的配置才會(huì)生效;

常用的Conditional注解:

@ConditionalOnClass : classpath中存在該類時(shí)起效

@ConditionalOnMissingClass : classpath中不存在該類時(shí)起效

@ConditionalOnBean : DI容器中存在該類型Bean時(shí)起效

@ConditionalOnMissingBean : DI容器中不存在該類型Bean時(shí)起效

@ConditionalOnSingleCandidate : DI容器中該類型Bean只有一個(gè)或@Primary的只有一個(gè)時(shí)起效

@ConditionalOnExpression : SpEL表達(dá)式結(jié)果為true時(shí)

@ConditionalOnProperty : 參數(shù)設(shè)置或者值一致時(shí)起效

@ConditionalOnResource : 指定的文件存在時(shí)起效

@ConditionalOnJndi : 指定的JNDI存在時(shí)起效

@ConditionalOnJava : 指定的Java版本存在時(shí)起效

@ConditionalOnWebApplication : Web應(yīng)用環(huán)境下起效

@ConditionalOnNotWebApplication : 非Web應(yīng)用環(huán)境下起效

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

相關(guān)文章

  • 用java開發(fā)dota英雄最華麗的技能(實(shí)例講解)

    用java開發(fā)dota英雄最華麗的技能(實(shí)例講解)

    下面小編就為大家分享一篇使用java開發(fā)dota英雄最華麗的技能實(shí)例,具有非常好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • mybatis創(chuàng)建項(xiàng)目報(bào)Invalid?bound?statement?(not?found)錯(cuò)誤解決方法

    mybatis創(chuàng)建項(xiàng)目報(bào)Invalid?bound?statement?(not?found)錯(cuò)誤解決方法

    使用MyBatis能夠幫助我們將SQL語(yǔ)句和Java代碼分離,這篇文章主要給大家介紹了關(guān)于mybatis創(chuàng)建項(xiàng)目報(bào)Invalid?bound?statement?(not?found)錯(cuò)誤的解決方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Java中常用的日期類圖文詳解

    Java中常用的日期類圖文詳解

    Java提供了Date類來(lái)處理日期、時(shí)間(此處的Date是指java.util包下的Date類,而不是java.sql包下的Date類),Date對(duì)象既包含日期,也包含時(shí)間,下面這篇文章主要給大家介紹了關(guān)于Java中常用的日期類的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 詳解Java集合中的基本數(shù)據(jù)結(jié)構(gòu)

    詳解Java集合中的基本數(shù)據(jù)結(jié)構(gòu)

    總有小伙伴讓我總結(jié)一下Java集合中的基本數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí),今天特地整理了本篇文章,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • Java中Optional的使用指南

    Java中Optional的使用指南

    這篇文章主要給大家介紹了關(guān)于Java中Optional使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • JavaWeb學(xué)習(xí)筆記之Filter和Listener

    JavaWeb學(xué)習(xí)筆記之Filter和Listener

    這篇文章主要給大家介紹了關(guān)于JavaWeb學(xué)習(xí)筆記之Filter和Listener的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 支撐Java NIO與NodeJS的底層技術(shù)

    支撐Java NIO與NodeJS的底層技術(shù)

    這篇文章主要為大家詳細(xì)介紹了支撐Java NIO與NodeJS的底層技術(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • SpringBoot整合Redis實(shí)現(xiàn)登錄失敗鎖定功能(實(shí)例詳解)

    SpringBoot整合Redis實(shí)現(xiàn)登錄失敗鎖定功能(實(shí)例詳解)

    本文我們已經(jīng)探討如何利用Redis來(lái)實(shí)現(xiàn)鎖定賬戶的安全措施,以及通過(guò)SpringBoot整合Redis實(shí)現(xiàn)了這一功能,感興趣的朋友跟隨小編一起學(xué)習(xí)下吧
    2024-02-02
  • Java基于裝飾者模式實(shí)現(xiàn)的染色饅頭案例詳解

    Java基于裝飾者模式實(shí)現(xiàn)的染色饅頭案例詳解

    這篇文章主要介紹了Java基于裝飾者模式實(shí)現(xiàn)的染色饅頭案例,簡(jiǎn)單描述了裝飾者模式的概念、原理及Java使用裝飾者模式的相關(guān)實(shí)現(xiàn)步驟、操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-05-05
  • 快速搭建Spring Boot+MyBatis的項(xiàng)目IDEA(附源碼下載)

    快速搭建Spring Boot+MyBatis的項(xiàng)目IDEA(附源碼下載)

    這篇文章主要介紹了快速搭建Spring Boot+MyBatis的項(xiàng)目IDEA(附源碼下載),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12

最新評(píng)論