日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
江帥帥:精通SpringBoot系列02-創(chuàng)新互聯(lián)

江帥帥:精通 Spring Boot 系列 02

創(chuàng)新互聯(lián)是一家專業(yè)提供七星企業(yè)網(wǎng)站建設,專注與成都網(wǎng)站制作、成都網(wǎng)站設計、H5頁面制作、小程序制作等業(yè)務。10年已為七星眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設計公司優(yōu)惠進行中。

1 @SpringBootApplication 注解

Spring Boot 的啟動類,也就是入口類,需要使用 @SpringBootApplication 注解來標注。在啟動類中,我們的 main 方法就是 Java 應用程序的入口方法。

@SpringBootApplication 是一個組合注解,具體源碼如下:

江帥帥:精通 Spring Boot 系列 02江帥帥:精通 Spring Boot 系列 02

其中,比較重要的三個注解是:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。

2 @SpringBootConfiguration 注解

主要是負責 Spring Boot 應用配置相關的注解,它也是組合注解,具體源碼如下:

江帥帥:精通 Spring Boot 系列 02

通過源碼,可以看到它也使用了 @Configuration 注解,它們兩個都是將當前類標注為配置類,能將類中使用 @Bean 注解標記的方法對應的實例注入到 Spring 容器中,那實例名就是方法名。

另外在 @Configuration 注解源碼中,還看到有一個 @Component 注解,做了再次封裝,主要是把普通 POJO 實例化到 Spring 容器中。具體源碼如下:

江帥帥:精通 Spring Boot 系列 02

所以,更推薦大家在 Spring Boot 應用中使用 @SpringBootConfiguration。

3 @EnableAutoConfiguration 注解

主要用來啟動自動配置,Spring Boot 就能夠根據(jù)依賴信息自動實現(xiàn)應用的相關配置,總體分為兩個部分:一是收集所有 spring.factories 中EnableAutoConfiguration 相關 bean 的類,二是將得到的類注冊到 Spring 容器中。將符合的配置都加載到 IoC 容器中。具體源碼如下:

江帥帥:精通 Spring Boot 系列 02

組件調(diào)用關系圖,具體如下:

江帥帥:精通 Spring Boot 系列 02

這張圖,怎么去理解呢?其實是這樣的,涉及到了 BeanFactory 的創(chuàng)建。Spring 框架中會調(diào)用 ApplicationContext 的 refresh 方法來啟動 Spring 容器,然后就會創(chuàng)建 BeanFactory,接著掃描各種包,讀取使用到了 @Configuration、@Import、@SpringBootApplication 等注解標注的類,然后生成 BeanDefinition 最終注冊到 BeanFactory 中。

然后就交給 BeanFactoryPostProcessor 來執(zhí)行,BeanFactory 后置處理器會處理 BeanDefinition,比如在 BeanFactoryPostProcessor 接口中,提供了 postProcessBeanFactory 方法來接收 ConfigurableListableBeanFactory 對象來處理。具體源碼如下:

江帥帥:精通 Spring Boot 系列 02

其他類似 @Configuration 等配置性質(zhì)的注解,就讓 ConfigurationClassPostProcessor 來處理。

上面的 ConfigurationClassPostProcessor 主要是 BeanFactoryPostProcessor 接口的實現(xiàn)類,主要是想從 BeanFactory 中獲取所有 BeanDefinition 列表,遍歷出那些使用了 @Configuration、@Import 等配置性質(zhì)注解標注的類所對應的 BeanDefintion,然后進行注冊。具體源碼如下:

江帥帥:精通 Spring Boot 系列 02江帥帥:精通 Spring Boot 系列 02

具體,我們還可以去看看它的 parse 方法是如何處理的,它會去解析注解。

江帥帥:精通 Spring Boot 系列 02

看到最后的 deferredImportSelectorHandler,這個內(nèi)部類的里面有一個 deferredImportSelectors 集合,主要是用來添加 AutoConfigurationImportSelector。這個內(nèi)部私有類,主要維護了一個類型為DeferredImportSelectorHolder 的 deferredImportSelectors 列表。這最后一句代碼,就是處理完其他BeanDefinitions 后調(diào)用 process 方法。

再接著來看 process 方法,它負責自動配置類導入的內(nèi)部實現(xiàn),具體源碼如下:

江帥帥:精通 Spring Boot 系列 02

這個方法,需要這么來理解:

首先,DeferredImportSelector 它會去從 spring-boot-autoconfigure 包路徑下的 META-INF/spring.factories 文件中找到 EnableAutoConfiguration 作為 key,然后獲取對應的自動配置類列表。

第二步,在里面通過 key 即可找到對應需要自動配置的類。接著會進行遍歷所有類名,加載和導入對應的配置類。

大致的思路是會先創(chuàng)建一個 ConfigurationClass 的對象,它會包含當前這個配置類,然后傳進被調(diào)用的 doProcessConfigurationClass 方法中,然后處理該類包含的注解。如果是 @Import 注解,則會放在 processImports 方法中進行處理。

再具體講,就是那些非 ImportSelector 接口實現(xiàn)類和ImportBeanDefinitionRegistrar 接口實現(xiàn)類的配置類,就會調(diào)用processConfigurationClass 方法來處理該自動配置類上面的其他注解,并將該自動配置類內(nèi)部使用了 @Bean 注解的所有方法,條件化生成 bean 并注冊到 Spring 容器,那最終就可以提供特定功能組件的默認實現(xiàn),也就實現(xiàn)了 SpringBoot 的自動配置功能,在你使用的時候,比如直接通過 @Autowried 注解就可以注入某個功能組件,而不需要顯示配置。

具體源碼如下(這里不貼全部源碼了,大家可以看看它給出的注釋就明白了):

江帥帥:精通 Spring Boot 系列 02

4 獲取 Bean 類信息

我們可以來研究下這個注解,了解它是如何加載配置的。在源碼中,可以看到 @Import({AutoConfigurationImportSelector.class}) 注解,導入的就是自動配置選擇器。

AutoConfigurationImportSelector 選擇器是 DeferredImportSelector 接口的實現(xiàn)類,會在 BeanFactory 中對所有 BeanDefinition 處理后執(zhí)行來進行 SpringBoot 自動配置類的加載、導入操作等,并基于 @Conditional 條件化配置來決定是否將該配置類內(nèi)部定義的 Bean 注冊到 Spring 容器。具體源碼如下:

江帥帥:精通 Spring Boot 系列 02

在 AutoConfigurationImportSelector.class 中,可以看到實現(xiàn)了一個 selectImports 方法,用來導出 Configuration。方法中調(diào)用了 getAutoConfigurationEntry 方法,獲取 bean 類信息。具體源碼如下:

江帥帥:精通 Spring Boot 系列 02

繼續(xù)來看 getAutoConfigurationEntry 方法,具體源碼如下:

江帥帥:精通 Spring Boot 系列 02

再接著來看調(diào)用的 getCandidateConfigurations 方法,它主要是想獲取所有對應的配置,它里面調(diào)用了 loadFactoryNames 方法,目的是要想加載 spring.factories 文件。它們的源碼具體如下:

江帥帥:精通 Spring Boot 系列 02

loadFactoryNames 方法的具體源碼如下:

江帥帥:精通 Spring Boot 系列 02

接著就在 loadSpringFactories 方法中,找到所有的 spring.factories 配置信息,然后全部返回。具體源碼如下:

江帥帥:精通 Spring Boot 系列 02

來源:奈學開發(fā)者社區(qū)


新聞名稱:江帥帥:精通SpringBoot系列02-創(chuàng)新互聯(lián)
標題網(wǎng)址:http://www.dlmjj.cn/article/ccioji.html