SpringBoot學習筆記(一) 啟動類

2021-08-29 18:54:53 字數 4247 閱讀 1181

二、解讀run方法

大概聊聊springboot的自動配置,這裡是基於springboot 2.0.6.release,spring 5.0.10.release。

public

class

}

@target()

@retention

(retentionpolicy.runtime)

@documented

@inherited

@springbootconfiguration

// springboot特有的配置註解

@enableautoconfiguration

// 開啟自動配置(本質是根據依賴自動配置)

@componentscan

( excludefilters =),

@filter

(type = filtertype.custom,classes =)}

)public @inte***ce

)@retention

(retentionpolicy.runtime)

@documented

@configuration

public @inte***ce

springbootconfiguration

@target()

@retention

(retentionpolicy.runtime)

@documented

@inherited

@autoconfigurationpackage

// 自動配置包

@import()

public @inte***ce

enableautoconfiguration

; string[

]excludename()

default

;}

@autoconfigurationimportselector

import了autoconfigurationimportselector類:

@override

public string[

]selectimports

(annotationmetadata annotationmetadata)

autoconfigurationmetadata autoconfigurationmetadata = autoconfigurationmetadataloader

.loadmetadata

(this

.beanclassloader)

; annotationattributes attributes =

getattributes

(annotationmetadata)

; list

configurations =

getcandidateconfigurations

(annotationmetadata,

attributes)

; configurations =

removeduplicates

(configurations)

; set

exclusions =

getexclusions

(annotationmetadata, attributes)

;checkexcludedclasses

(configurations, exclusions)

; configurations.

removeall

(exclusions)

; configurations =

filter

(configurations, autoconfigurationmetadata)

;fireautoconfigurationimportevents

(configurations, exclusions)

;return stringutils.

tostringarray

(configurations);}

↓ protected list

getcandidateconfigurations

(annotationmetadata metadata,

annotationattributes attributes)

重寫了selectimports()方法,其中呼叫了getcandidateconfigurations()方法,通過註解元資料和註解屬性獲得候選配置。loadfactorynames()方法通過loadspringfactories()載入meta-inf/spring.factories檔案。(下文2.1會具體解讀)其中就有enableautoconfiguration,提供了許多自動配置類。

autoconfigure下有各種自動配置:

meta-inf/spring.factories看到有許多自動裝配的bean

(key-value形式,key是類名或者介面名,而value是實現名)

而當這些配置滿足一定條件,就會自動配置。

@configuration

@conditionalonclass()

@enableconfigurationproperties()

@import()

public

class

datasourceautoconfiguration

, args);}

↓public

(class<

?>

primarysources,

string[

] args)

↓public

(resourceloader resourceloader, class<

?>..

. primarysources)

(

)for

(string classname : servlet_indicator_classes)}}

private

static

final string[

] servlet_indicator_classes =

;

private

collection

getspringfactoriesinstances

(class

type,

class<

?>

parametertypes, object.

.. args)

2.1、springfactoriesloader類的loadfactorynames
public

static list

loadfactorynames

(class<

?> factoryclass,

@nullable classloader classloader)

↓private

static map

>

loadspringfactories

(@nullable classloader classloader)

try}

cache.

put(classloader, result)

;return result;

}catch

(ioexception ex)

}

類載入器到factories_resource_location路徑下獲取檔案資源。

public

static

final string factories_resource_location =

"meta-inf/spring.factories"

;

可以看到,最後也是要讀取meta-inf下的spring.factories檔案。

Springboot學習筆記(一)

web應用 spring web mvc 應用 spring web flux 應用 元件自動裝配 web mvc,web flax,jdbc 嵌入式web容器 tomcat,jetty,undertow 生產準備特性 指標,健康檢查,外部化配置 元件自動裝配 啟用 enableautoconfig...

學習springboot筆記(一)

1.微服務 乙個專案可以由多個小型服務構成 微服務 springboot可以快速開發微服務塊。2.springboot功能 a 簡化j2ee開發 b 整個spring技術的棧的整合 整合springmvc spring c 整個j2ee技術的整合 整合mybatis struct2 redis 3....

SpringBoot學習筆記(一)

spring.profiles.active tomcat配置 修改伺服器端口號 server.port 8081 修改上下文路徑 server.servlet.context path example 配置 tomcat url 編碼 server.tomcat.uri encoding utf ...