国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

鞋圖相冊(cè)網(wǎng)站怎么做app拉新平臺(tái)哪個(gè)好傭金高

鞋圖相冊(cè)網(wǎng)站怎么做,app拉新平臺(tái)哪個(gè)好傭金高,學(xué)校網(wǎng)站建設(shè)的技術(shù)方案,澳門服務(wù)器做網(wǎng)站需要備案嗎SpringBoot底層原理 一 配置優(yōu)先級(jí) 1.配置方式 Springboot中支持三種配置方式,分別為: application.propertiesapplication.ymlapplication.yaml 2.配置優(yōu)先級(jí) 當(dāng)存在多份配置文件時(shí),配置文件會(huì)按照它們的優(yōu)先級(jí)生效。 優(yōu)先級(jí)從高到底…

SpringBoot底層原理

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

1.配置方式

Springboot中支持三種配置方式,分別為:

  • application.properties
  • application.yml
  • application.yaml

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

當(dāng)存在多份配置文件時(shí),配置文件會(huì)按照它們的優(yōu)先級(jí)生效。

優(yōu)先級(jí)從高到底分別為:application.peoperties>application.yml>application.yaml

目前 application.yml 是最主流的方式

3.其他配置方式

Springboot除了以上常見的三種配置方式之外,還支持Java系統(tǒng)屬性配置和命令行參數(shù)配置。

1.Java系統(tǒng)屬性配置示例

# 在 java 命令后使用 —D 命令,然后書寫需要配置的屬性即可
# 示例中配置了項(xiàng)目的運(yùn)行端口為8081,即server.port=8081
java -Dserver.port=8081 -jar [packageName].jar

2.命令行參數(shù)配置示例

# 在jar包名稱之后,使用雙橫杠(--),后面緊跟配置的參數(shù)即可
java -jar [packageName].jar --server.port=8082

二 Bean管理

1.獲取bean對(duì)象

默認(rèn)情況下,Springboot項(xiàng)目在啟動(dòng)時(shí)會(huì)自動(dòng)創(chuàng)建bean,并且將這些bean都存放在IOC容器中。

如果想手動(dòng)獲取這些bean,則可以通過以下幾種示例。

首先需要注入ApplicationContext對(duì)象。

Spring框架中,ApplicationContext是一個(gè)接口,代表了Spring容器,它負(fù)責(zé)管理Spring應(yīng)用程序中所有的bean,同時(shí)提供了一些方法來獲取Bean,注冊(cè)Bean,是整個(gè)Spring應(yīng)用的核心。

默認(rèn)情況下,一個(gè)Bean的名稱是它的類名名稱,然后將首字母小寫。

例如 DeptController,它在IOC容器中的默認(rèn)名稱為 deptController

@Autowired
private ApplicationContext applicationContext;
@Test
void test1(){//1.根據(jù)bean的名稱來獲取bean對(duì)象EmpServiceImpl empServiceImpl1= (EmpServiceImpl) applicationContext.getBean("empServiceImpl");System.out.println(empServiceImpl1);//2.根據(jù)bean的類型來獲取bean對(duì)象EmpServiceImpl empServiceImpl2= applicationContext.getBean(EmpServiceImpl.class);System.out.println(empServiceImpl2);//3.根據(jù)bean的類型和名稱來獲取bean對(duì)象// 以下方法和示例,在bean的默認(rèn)名稱被修改且有多個(gè)同類型的bean時(shí),尤為有用。EmpServiceImpl empServiceImpl3= applicationContext.getBean("empServiceImpl",EmpServiceImpl.class);System.out.println(empServiceImpl3);
}

運(yùn)行以上示例,可以看出,bean在IOC容器中,默認(rèn)是單例存在的。
在這里插入圖片描述如果想要實(shí)現(xiàn)每次使用時(shí)都是一個(gè)新的bean,則需要通過bean的作用域來進(jìn)行配置。

2.bean的作用域

在Spring中,bean支持五種作用域,后三種在web環(huán)境下才能生效。

在這里插入圖片描述

默認(rèn)情況下,Bean對(duì)象在項(xiàng)目啟動(dòng)時(shí)就會(huì)默認(rèn)實(shí)例化。如果不希望在項(xiàng)目啟動(dòng)時(shí)就初始化,可以使用@Lazy注解,讓Bean對(duì)象延遲初始化,直到第一次使用該Bean時(shí)才會(huì)進(jìn)行初始化。

@Service
@Lazy
public class EmpServiceImpl extends ServiceImpl<EmpMapper, Emp> implements EmpService{//code...
}

設(shè)置Bean的作用域,則需要通過@Scope注解來實(shí)現(xiàn)。

以下示例中,我們將Bean的作用域設(shè)置為 prototype,即每次使用該Bean時(shí)都會(huì)創(chuàng)建新對(duì)象。

@Service
@Scope("prototype")
public class EmpServiceImpl extends ServiceImpl<EmpMapper, Emp> implements EmpService{//code...
}

現(xiàn)在再次運(yùn)行前邊獲取Bean對(duì)象的代碼示例,可以發(fā)現(xiàn),三次獲取到的Bean對(duì)象,已經(jīng)不是同一個(gè)。
在這里插入圖片描述

3.聲明第三方bean

如果要申明的Bean來自第三方,是無法通過@Component及衍生注解來申明的,這個(gè)時(shí)候就需要使用@Bean注解。

以 SAXReader 類為例,創(chuàng)建一個(gè)返回值為SAXReader對(duì)象的方法,方法名稱就是以后被ICO管理的Bean對(duì)象名稱。

//將方法的返回值交給IOC容器管理,稱為IOC容器的Bean對(duì)象
@Bean
public SAXReader saxReader(){return new SAXReader();
}

在以后需要用到 SAXReader 對(duì)象的時(shí)候,直接注入即可,不用去實(shí)例化。

@Autowired
private SAXReader saxReader;
@Test
void test2() throws DocumentException {Document document = saxReader.read("xxx");
}

注意:一般情況下,我們通常會(huì)將所有需要申明的第三方bean對(duì)象統(tǒng)一放在一個(gè)配置類中,這樣更加方便維護(hù)。

@Configuration
public class BeanAutoConfig {// 可以通過@Bean注解的 name /value 屬性來定義bean的名稱// 默認(rèn)情況下,bean的名稱就是方法名@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}}

在聲明第三方bean對(duì)象時(shí),如果需要進(jìn)行依賴注入,則只需要指定方法形參即可。Spring會(huì)根據(jù)類型進(jìn)行自動(dòng)裝配。

// EmpServiceImpl對(duì)象是要注入的bean對(duì)象
@Bean
public RestTemplate restTemplate(EmpServiceImpl empServiceImpl){empServiceImpl.[xxx];return new RestTemplate();
}

三 Springboot原理

1.Springboot起步依賴

Springboot整合了以前web開發(fā)需要用的一些依賴項(xiàng),目前使用Springboot開發(fā)web項(xiàng)目,只需要引入 spring-boot-start-web 依賴即可。
在這里插入圖片描述
歸根結(jié)底,SPringboot起步依賴的原理就是maven的依賴傳遞

2.自動(dòng)配置

當(dāng)Springboot項(xiàng)目啟動(dòng)后,Springboot中的一些配置類,bean對(duì)象就會(huì)自動(dòng)存入到IOC容器中,不需要我們手動(dòng)去申明。從而簡(jiǎn)化了開發(fā),省去了繁瑣的配置。

3.管理第三方包中的Bean

1.配置實(shí)現(xiàn)方式1:@ComponentScan 組件掃描

在啟動(dòng)類上使用 @ComponentScan注解,重新配置包掃描路徑。@ComponentScanbasePackages參數(shù)支持?jǐn)?shù)據(jù)格式,當(dāng)有多個(gè)第三方包時(shí),可使用數(shù)組形式申明。

@ComponentScan(basePackages = "xxx1")

@ComponentScan(basePackages = {"xxx1","xxx2"
})

注意:使用@ComponentScan申明時(shí),當(dāng)前Springboot項(xiàng)目中的包路徑也必須包含在內(nèi),否則當(dāng)前項(xiàng)目中的bean將會(huì)被無法識(shí)別。

缺點(diǎn):當(dāng)項(xiàng)目較大時(shí),引入大量的第三方依賴,此時(shí)啟動(dòng)類將會(huì)顯得臃腫。

2.配置實(shí)現(xiàn)方式2:@Import 組件導(dǎo)入

使用@Import導(dǎo)入的類會(huì)被Spring加載到容器中??梢詫?dǎo)入普通類,配置類,以及 ImportSelector 接口的實(shí)現(xiàn)類,支持?jǐn)?shù)組。

@Import({xx1.class,xx2.class})

實(shí)現(xiàn)ImportSelector 接口,這里最核心的就是 selectImports方法,它返回了需要?jiǎng)?chuàng)建Bean對(duì)象的全部類。

public class MyImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {//此處的數(shù)組內(nèi)容為需要導(dǎo)入的Bean對(duì)象的全類名,有多少寫多少return new String[]{"springboot.demo.GoodStudent"};}
}

然后在啟動(dòng)類上使用@Import注解即可。

@Import({MyImportSelector.class})

單純使用 @Import接口聲明第三方Bean,缺點(diǎn)很明顯。

3.配置實(shí)現(xiàn)方式3:第三方依賴提供注解

實(shí)際項(xiàng)目中,具體第三方依賴需要導(dǎo)入哪些Bean,只有第三方依賴自己知道。所以可以由第三方依賴提供注解,然后在項(xiàng)目中引入即可。

此類型注解一般均由 Enable 開頭,原理是在自定義注解中封裝 @Import 注解。

示例:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import({MybatisPlusConfig.class,CorsConfig.class,SpringWebConfig.class,BeanAutoConfig.class,RedisConfig.class
})
public @interface EnableShawnConfig {}

在第三方依賴包中定義一個(gè)EnableShawnConfig注解,然后使用 @Import將需要配置的Bean對(duì)象都引入進(jìn)來。最后再在項(xiàng)目中使用該注解即可。

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

4.自動(dòng)配置原理分析

Springboot核心注解:@SpringBootApplication

@SpringBootApplication下的重要注解:

  • @SpringBootConfiguration:申明當(dāng)前注解也是一個(gè)配置類,因?yàn)?code>@SpringBootConfiguration中也申明了@Configuration注解。所以可以直接在啟動(dòng)類中申明第三方的bean對(duì)象。
  • @EnableAutoConfiguration:Springboot自動(dòng)配置的核心注解,它聲明了@Import(AutoConfigurationImportSelector.class)AutoConfigurationImportSelectorImportSelector接口的實(shí)現(xiàn)類,實(shí)現(xiàn)了 selectImports 方法。selectImports 方法返回了需要?jiǎng)?chuàng)建Bean對(duì)象的全部信息。
  • @ComponentScan:組件掃描,默認(rèn)掃描當(dāng)前引導(dǎo)類及其所在的子包。

自動(dòng)配置最核心的注解就是@EnableAutoConfiguration,由源碼可知,selectImports 方法會(huì)讀取一個(gè)固定目錄下后綴名為.imports的文件。

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {List<String> configurations = ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader()).getCandidates();Assert.notEmpty(configurations,"No auto configuration classes found in "+ "META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you "+ "are using a custom packaging, make sure that file is correct.");return configurations;
}

springboot3.x中,META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中,配置了需要?jiǎng)?chuàng)建Bean對(duì)象的全類名

在Springboot2.x中,是通過兩個(gè)關(guān)鍵文件來讀取配置好的全類名的。
在這里插入圖片描述
spring.factories 是早起Springboot版本中自動(dòng)配置的文件,在后續(xù)版本中已經(jīng)逐漸不再使用。

5.@Conditinal注解

@Conditinal注解的作用:按照一定的條件判斷,在滿足條件后才會(huì)注冊(cè)對(duì)應(yīng)的Bean對(duì)象到IOC容器中

它可以作用在方法上。

@Conditinal本身是一個(gè)父級(jí)注解,它衍生除了很多子級(jí)注解

  • @ConditionalOnClass:判斷環(huán)境中是否存在字節(jié)碼文件,有則注冊(cè)bean對(duì)象到IOC容器
  • @ConditionalOnMissingBean:判斷環(huán)境中有沒有對(duì)應(yīng)的Bean(根據(jù)類型和名稱),沒有則注冊(cè)Bean對(duì)象到IOC容器
  • @ConditionalOnProperty:判斷配置文件中是否有對(duì)應(yīng)屬性和值,有則注冊(cè)bean對(duì)象到IOC容器
http://www.aloenet.com.cn/news/32095.html

相關(guān)文章:

  • 專業(yè)做網(wǎng)站建設(shè)建站公司網(wǎng)站怎么做
  • 建設(shè)項(xiàng)目立項(xiàng)網(wǎng)站搜索引擎優(yōu)化網(wǎng)站
  • 如何做二維碼跳轉(zhuǎn)到網(wǎng)站軟件開發(fā)
  • 杭州余杭做網(wǎng)站公司免費(fèi)推廣網(wǎng)站地址大全
  • 傳統(tǒng)網(wǎng)站有沒有建設(shè)必要建網(wǎng)站賺錢
  • 承德網(wǎng)站建設(shè)方案在線排名優(yōu)化工具
  • 個(gè)人網(wǎng)站 數(shù)據(jù)庫如何上傳到空間視頻號(hào)推廣
  • 墻內(nèi)千兆網(wǎng)站怎么做seo應(yīng)該怎么做
  • 網(wǎng)站怎么做下載連接重慶seo網(wǎng)絡(luò)推廣平臺(tái)
  • 微信營(yíng)銷網(wǎng)站模板中國(guó)疾控衛(wèi)生應(yīng)急服裝
  • 網(wǎng)站怎么做qq登錄界面百度知道合伙人
  • 網(wǎng)站做支付要多少錢seo公司怎么樣
  • 網(wǎng)站收費(fèi)怎么做seo技術(shù)快速網(wǎng)站排名
  • 東至網(wǎng)站定制免費(fèi)入駐的賣貨平臺(tái)
  • 視頻網(wǎng)站砸錢做生態(tài)百度一下官網(wǎng)
  • 初次建設(shè)網(wǎng)站的技巧聊城網(wǎng)站推廣的公司
  • 怎么用阿帕奇做網(wǎng)站谷歌廣告聯(lián)盟
  • 山東做網(wǎng)站的公司蘭州做網(wǎng)站的公司
  • 房地產(chǎn)營(yíng)銷門戶網(wǎng)站建設(shè)鄭州網(wǎng)站建設(shè)價(jià)格
  • 公司網(wǎng)站制作公司排名網(wǎng)絡(luò)營(yíng)銷推廣策略有哪些
  • 有關(guān)師德建設(shè)的網(wǎng)站網(wǎng)站建設(shè)需要多少錢?
  • 做網(wǎng)站用的hu軟件網(wǎng)站維護(hù)費(fèi)一年多少錢
  • 企業(yè)管理網(wǎng)站開發(fā)論文可以營(yíng)銷的十大產(chǎn)品
  • 唐山seo快速排名seo全稱是什么
  • 汕頭百度網(wǎng)站建設(shè)成都網(wǎng)絡(luò)營(yíng)銷品牌代理機(jī)構(gòu)
  • 織夢(mèng)修改網(wǎng)站后備份網(wǎng)絡(luò)軟文
  • 搭建平臺(tái)暢通渠道網(wǎng)站seo推廣
  • 自己做網(wǎng)絡(luò)棋牌網(wǎng)站流程泉州seo報(bào)價(jià)
  • 商城網(wǎng)站建設(shè)招聘百度搜索風(fēng)云榜總榜
  • 網(wǎng)站app開發(fā)平臺(tái)網(wǎng)站搭建谷歌seo