最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

SpringBoot原理篇

2023-04-16 16:39 作者:蘇喆i  | 我要投稿

目錄

配置優(yōu)先級(jí)

Bean管理

SpringBoot原理

一、配置優(yōu)先級(jí)

配置

SpringBoot 中支持三種格式的配置文件

注意事項(xiàng):

雖然springboot支持多種格式配置文件,但是在項(xiàng)目開發(fā)時(shí),推薦統(tǒng)一使用一種格式的配置 (yml是主流)。

SpringBoot 除了支持配置文件屬性配置,還支持Java系統(tǒng)屬性命令行參數(shù)的方式進(jìn)行屬性配置。

Java系統(tǒng)屬性:-Dserver.port=9000

命令行參數(shù):--server.port=10010

①. 執(zhí)行maven打包指令package

②. 執(zhí)行java指令,運(yùn)行jar包

java -Dserver.port=9000 -jar tlias-web-management-0.0.1-SNAPSHOT.jar --server.port=10010

注意事項(xiàng):

Springboot項(xiàng)目進(jìn)行打包時(shí),需要引入插件 spring-boot-maven-plugin (基于官網(wǎng)骨架創(chuàng)建項(xiàng)目,會(huì)自動(dòng)添加該插件)

優(yōu)先級(jí)(高到底)

  • 命令行參數(shù)(--xxx=xxx)

  • java系統(tǒng)屬性(-Dxxx=xxx)

  • application.properties

  • application.yml

  • application.yaml(忽略)

二、Bean管理

1.獲取bean

默認(rèn)情況下,Spring項(xiàng)目啟動(dòng)時(shí),會(huì)把bean都創(chuàng)建好放在IOC容器中,如果想要主動(dòng)獲取這些bean,可以通過如下方式:

根據(jù)name獲取bean:

Object getBean(String name)

根據(jù)類型獲取bean:

<T> T getBean(Class<T> requiredType)

根據(jù)name的名稱及類型獲取bean:

<T> T getBean(String name, Class<T> requiredType)

注意事項(xiàng):

上述所說的 【Spring項(xiàng)目啟動(dòng)時(shí),會(huì)把其中的bean都創(chuàng)建好】還會(huì)受到作用域及延遲初始化影響,這里主要針對(duì)于 默認(rèn)的單例非延遲加載的bean而言。

2.bean作用域

Spring支持五種作用域,后三種在web環(huán)境才生效:

可以通過 @Scope 注解來進(jìn)行配置作用域:

注意事項(xiàng):

  • 默認(rèn)singleton的bean,在容器啟動(dòng)時(shí)被創(chuàng)建,可以使用@Lazy注解來延遲初始化(延遲到第一次使用時(shí))。

  • prototype的bean,每一次使用該bean的時(shí)候都會(huì)創(chuàng)建一個(gè)新的實(shí)例。

  • 實(shí)際開發(fā)當(dāng)中,絕大部分的Bean是單例的,也就是說絕大部分Bean不需要配置scope屬性。

3.第三方bean

@Bean

  • 如果要管理的bean對(duì)象來自于第三方(不是自定義的),是無法用 @Component 及衍生注解聲明bean的,就需要用到 @Bean注解。

  • 若要管理的第三方bean對(duì)象,建議對(duì)這些bean進(jìn)行集中分類配置,可以通過@Configuration注解聲明一個(gè)配置類。

新建一個(gè)config包,創(chuàng)建一個(gè)配置類(推薦)

測(cè)試:

注意事項(xiàng):

  • 通過@Bean注解的name或value屬性可以聲明bean的名稱,如果不指定,默認(rèn)bean的名稱就是方法名。

  • 如果第三方bean需要依賴其它bean對(duì)象,直接在bean定義方法中設(shè)置形參即可,容器會(huì)根據(jù)類型自動(dòng)裝配。

思考:

@Component 及衍生注解 與 @Bean注解使用場(chǎng)景?

  • 項(xiàng)目中自定義的,使用@Component及其衍生注解

  • 項(xiàng)目中引入第三方的,使用@Bean注解

SpringBoot原理

Spring
SpringBoot


1.起步依賴原理

spring框架進(jìn)行web程序開發(fā),我們要引入各種依賴,還要兼顧版本號(hào)(繁瑣)

spring框架進(jìn)行web程序開發(fā)

springboot框架進(jìn)行web程序開發(fā)

2.自動(dòng)配置

SpringBoot的自動(dòng)配置就是當(dāng)spring容器啟動(dòng)后,一些配置類、bean對(duì)象就自動(dòng)存入到了IOC容器中,不需要我們手動(dòng)去聲明,從而簡(jiǎn)化了開發(fā),省去了繁瑣的配置操作。

自動(dòng)配置原理(面試高頻):

方案一:@ComponentScan 組件掃描

方案二:@Import 導(dǎo)入。使用@Import導(dǎo)入的類會(huì)被Spring加載到IOC容器中,導(dǎo)入形式主要有以下幾種:

  • 導(dǎo)入 普通類,交給IOC容器管理

  • 導(dǎo)入 配置類,交給IOC容器管理

  • 導(dǎo)入 ImportSelector 接口實(shí)現(xiàn)類

  • @EnableXxxx注解,封裝@Import注解(優(yōu)雅、方便)

源碼跟蹤

@SpringBootApplication是源碼的入口,這個(gè)注解底層封裝了三個(gè)注解

?該注解標(biāo)識(shí)在SpringBoot工程引導(dǎo)類上,是SpringBoot中最最最重要的注解。該注解由三個(gè)部分組成:

  • ?@SpringBootConfiguration:該注解與 @Configuration 注解作用相同,用來聲明當(dāng)前也是一個(gè)配置類。

  • ?@ComponentScan:組件掃描,默認(rèn)掃描當(dāng)前引導(dǎo)類所在包及其子包。

  • ?@EnableAutoConfiguration:SpringBoot實(shí)現(xiàn)自動(dòng)化配置的核心注解。

在@EnableAutoConfiguration中又封裝了@Import注解

這個(gè)@Import注解當(dāng)中指定的是一個(gè)AutoConfigurationImportSelector這個(gè)接口的實(shí)現(xiàn)類,這個(gè)接口實(shí)現(xiàn)了selectImports這個(gè)方法

在這個(gè)方法AutoConfigurationImportSelector當(dāng)中加載了兩個(gè)文件。我們現(xiàn)在使用的版本是2.7.x版本,它還兼容spring.factories文件,到了springboot3.x.x當(dāng)中,spring.factories文件就會(huì)徹底移除掉。

org.springframework.boot.autoconfigure.AutoConfiguration.imports:

org.springframework.boot.autoconfigure.AutoConfiguration.imports這份文件當(dāng)中,定義的就是配置類的全類名,在這個(gè)配置類當(dāng)中,我們就可以通過@bean注解聲明一個(gè)一個(gè)的bean對(duì)象,最終SpringBoot項(xiàng)目在啟動(dòng)的時(shí)候,它就會(huì)加載這個(gè)配置文件當(dāng)中所配置的配置類,然后將這些配置類當(dāng)中的信息封裝到string類型的數(shù)組當(dāng)中,最終通過@Import這個(gè)注解將這些配置類全部加載到Spring的IOC容器當(dāng)中,交給IOC容器管理。


全部注冊(cè)為IOC容器的bean ?

SpringBoot會(huì)根據(jù)@Conditional注解條件裝配


@Conditional

作用:按照一定的條件進(jìn)行判斷,在滿足給定條件后才會(huì)注冊(cè)對(duì)應(yīng)的bean對(duì)象到Spring IOC容器中。

位置:方法、類

@Conditional 本身是一個(gè)父注解,派生出大量的子注解:

  • ?@ConditionalOnClass:判斷環(huán)境中是否有對(duì)應(yīng)字節(jié)碼文件,才注冊(cè)bean到IOC容器。

  • ?@ConditionalOnMissingBean:判斷環(huán)境中沒有對(duì)應(yīng)的bean(類型 或 名稱) ,才注冊(cè)bean到IOC容器。

  • ?@ConditionalOnProperty:判斷配置文件中有對(duì)應(yīng)屬性和值,才注冊(cè)bean到IOC容器。

案例(自定義starter)

在實(shí)際開發(fā)中,經(jīng)常會(huì)定義一些公共組件,提供給各個(gè)項(xiàng)目團(tuán)隊(duì)使用。而在SpringBoot的項(xiàng)目中,一般會(huì)將這些公共組件封裝為SpringBoot 的 starter。

需求:自定義aliyun-oss-spring-boot-starter,完成阿里云OSS操作工具類 AliyunOSSUtils 的自動(dòng)配置。

目標(biāo):引入起步依賴引入之后,要想使用阿里云OSS,注入 AliyunOSSUtils直接使用即可。

步驟:

  • 創(chuàng)建 aliyun-oss-spring-boot-starter 模塊

  • 創(chuàng)建aliyun-oss-spring-boot-autoconfigure模塊,在starter中引入該模塊

  • 在aliyun-oss-spring-boot-autoconfigure模塊中的定義自動(dòng)配置功能,并定義自動(dòng)配置文件 META-INF/spring/xxxx.imports

SpringBoot原理篇的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
吴堡县| 旺苍县| 马关县| 肥东县| 灵山县| 正定县| 白沙| 张家界市| 乐东| 平顺县| 鹤岗市| 天祝| 建水县| 凤阳县| 商河县| 青海省| 武城县| 德钦县| 平潭县| 霍林郭勒市| 郸城县| 沈阳市| 勃利县| 文安县| 峨眉山市| 建始县| 北海市| 长顺县| 抚顺县| 贵港市| 呼图壁县| 榆林市| 定边县| 延庆县| 长垣县| 龙门县| 新乡县| 霍林郭勒市| 忻城县| 双鸭山市| 松阳县|