成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

SpringBoot原理深入篇

gotham / 3374人閱讀

摘要:啟動原理和執(zhí)行原理分析一的啟動原理我們打開,注意看下面兩個依賴我們第一步是繼承了父項(xiàng)目,然后在添加啟動器的依賴,項(xiàng)目就會自動給我們導(dǎo)入關(guān)于項(xiàng)目所需要的配置和。

上一篇我們看到,我們很輕松的完成了項(xiàng)目的構(gòu)建,那么SpringBoot是如何做到的呢,在使用的使用又有哪些通用配置和注意事項(xiàng)呢?

其實(shí)SpringBoot給我們做了大量的自動配置功能,我們只需要引入對應(yīng)的啟動器就可以直接使用,
作為SpringBoot的使用者,一定要對其原理有一個大致的了解,避免遇到問題時無法跟蹤。 接下來我們來分析分析。

啟動原理和執(zhí)行原理分析 一、SpringBoot 的啟動原理

我們打開POM.XML, 注意看下面兩個依賴:

    
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.1.RELEASE
    

    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
    

我們第一步是繼承了父項(xiàng)目:spring-boot-starter-parent, 然后在添加 spring-boot-starter-web (WEB啟動器)的依賴,項(xiàng)目就會自動給我們導(dǎo)入關(guān)于WEB項(xiàng)目所需要的配置和JAR。如圖:

可能我們還有疑問,為什么一個mian方法就可以直接運(yùn)行了,我們看看main方法類。

整個方法中, 就注解 @SpringBootApplication 和 SpringApplication 是我們不認(rèn)識的,也比較臉生, 而且項(xiàng)目的啟動也是從這里運(yùn)行的,那么我們就來看看他們是個啥,
我們先看直接,我們把鼠標(biāo)移動到注解上面。

發(fā)現(xiàn)他是一個組合注解, 里面很有很注解,我們來對每個注解來分析一下:

前面 4 個是注解的元數(shù)據(jù)信息, 我們主要看后面 3 個注解:

@SpringBootConfiguration 點(diǎn)擊進(jìn)去,我們發(fā)現(xiàn)使用的是 Spring 的 @Configuration

所以,到這里我們就可以知道,SpringBoot使用的是 @Configuration 的方式來配置IOC容器,@Configuration 就好比對應(yīng)我們原來的一個XML配置文件(SpringBoot社區(qū)推薦使用基于JavaConfig的配置形式), 比如:

我們原來是這么寫:



 
    
    
      .....省略
    

而現(xiàn)在可以用JavaConfig這么配置:

/**
 *@Description: 阿里連接池
 *@Author:楊攀
 *@Since:2019年1月6日下午5:18:02  
 */
@Configuration
public class DruidDataSourceConfig {
     
    
    @Bean
    public DruidDataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        //設(shè)置參數(shù)
        //.....省略
        return dataSource;
    }    

在該類中標(biāo)注了 @Bean 的方法返回的實(shí)例,都會注入到IOC容器中,而bean的id默認(rèn)為方法名。(注意:@Configuration 是spring的注解,不是springboot的,本身spring提供了JavaConfig的配置)。

@EnableAutoConfiguration 注解,如果熟悉Spring框架的人都知道, Spring中也定義了很多@Enable開頭的注解, 比如: @EnableCaching等,如圖

他們都是通過@import來導(dǎo)入對應(yīng)的配置類。 SpringBoot 也是一樣, @EnableAutoConfiguration點(diǎn)擊進(jìn)入,也是通過@import來導(dǎo)入的。將所有符合自動配置條件的bean定義加載到IOC容器中

其中:
@AutoConfigurationPackage 自動配置包注解, 點(diǎn)擊進(jìn)去后,我們可以看到源代碼:

其實(shí)這里就是把bean注冊到spring中, 我們可以斷點(diǎn)看看

上圖中,我們已經(jīng)看到掃描到的包是 com.topinfo.yangp,就是我們main方法類的包及子包都會被掃描并注冊。

我們繼續(xù)更進(jìn),在添加后,發(fā)現(xiàn)txApplication已經(jīng)注冊到Spring中了。
所以,我們在寫啟動類的時候,我們需要放在項(xiàng)目的頂級包中,以便SpringBoot進(jìn)行掃描。

@Import(AutoConfigurationImportSelector.class) 導(dǎo)入注解,從名稱上來看,它導(dǎo)入了一個自動配置導(dǎo)入選擇器, 我們點(diǎn)擊進(jìn)去

它實(shí)現(xiàn)了多個接口,并實(shí)現(xiàn)了一個 selectImports

然后我們點(diǎn)擊 100 行, 繼續(xù)跟進(jìn)去

我們看 199 行, getCandidateConfigurations 根據(jù)獲取配置,點(diǎn)擊

會去讀取一個 spring.factories 的文件,讀取不到會表這個錯誤,我們繼續(xù)根據(jù)會看到,最終路徑的長這樣,而這個是spring提供的一個工具類。

它其實(shí)是去加載一個外部的文件,而這文件是在

我們打開這個文件,發(fā)現(xiàn)其有很多很多的自動配置類,包括SpringMVC,這就是為什么我們一開始就可以直接使用mvc的原因,如圖:

就這樣,@EnableAutoConfiguration就是從classpath中搜尋META-INF/spring.factories配置文件,并將其中org.springframework.boot.autoconfigure.EnableutoConfiguration對應(yīng)的配置項(xiàng)通過反射(Java Refletion)實(shí)例化為對應(yīng)的標(biāo)注了@Configuration的JavaConfig形式的配置類,并加載到IOC容器中。

@ComponentScan 包掃描,就是根據(jù)定義的掃描路徑,把符合掃描規(guī)則的類裝配到spring容器中

這樣,關(guān)于 @SpringBootApplication 的注解的功能就分析差不多了, 簡單來說就是 3 個注解的組合注解,如:

@SpringBootApplication

|- @SpringBootConfiguration
   |- @Configuration  //通過javaConfig的方式來添加組件到IOC容器中
|- @EnableAutoConfiguration
   |- @AutoConfigurationPackage //自動配置包,與@ComponentScan掃描到的添加到IOC
   |- @Import(AutoConfigurationImportSelector.class) //到META-INF/spring.factories中定義的bean添加到IOC容器中
|- @ComponentScan 包掃描

關(guān)于SpringBoot的啟動原理就差不多了。

二、SpringBoot 的執(zhí)行原理

就是,嗯,注解我們剛剛看過了,我們現(xiàn)在來看看為什么mian方法執(zhí)行后,項(xiàng)目就直接啟動了,我們再來瞄一眼main方法:

直覺告訴我們,我們肯定從run方法入手,如圖:

方法中,先創(chuàng)建了一個SpringApplication的實(shí)例,然后調(diào)用實(shí)例的run方法,我們先看看new實(shí)例的時候做了什么,點(diǎn)擊進(jìn)去查看,

點(diǎn)擊267行

我們可以看到,其實(shí)他主要做了幾個事情:
1、根據(jù)classpath里面是否存在某個特征類來判斷是否應(yīng)該創(chuàng)建一個為Web應(yīng)用使用的ApplicationContext類型
2、在應(yīng)用的classpath中查找并加載所有可用的ApplicationContextInitializer
3、在應(yīng)用的classpath中查找并加載所有可用的ApplicationListener

然后執(zhí)行run方法。 我們看run方法,跟蹤后,我們可以看到run方法的內(nèi)部實(shí)現(xiàn)。

到此,SpringBoot的啟動執(zhí)行就差不多了,,后面我們在將下SpringBoot的常用配置

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72847.html

相關(guān)文章

  • Java后端

    摘要:,面向切面編程,中最主要的是用于事務(wù)方面的使用。目標(biāo)達(dá)成后還會有去構(gòu)建微服務(wù),希望大家多多支持。原文地址手把手教程優(yōu)雅的應(yīng)用四手把手實(shí)現(xiàn)后端搭建第四期 SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Spring 兩大核心之 AOP 學(xué)習(xí) | 掘金技術(shù)征文 原本地址:SpringMVC 干貨系列:從零搭建 SpringMVC+mybatis(四):Sp...

    joyvw 評論0 收藏0
  • java

    摘要:多線程編程這篇文章分析了多線程的優(yōu)缺點(diǎn),如何創(chuàng)建多線程,分享了線程安全和線程通信線程池等等一些知識。 中間件技術(shù)入門教程 中間件技術(shù)入門教程,本博客介紹了 ESB、MQ、JMS 的一些知識... SpringBoot 多數(shù)據(jù)源 SpringBoot 使用主從數(shù)據(jù)源 簡易的后臺管理權(quán)限設(shè)計 從零開始搭建自己權(quán)限管理框架 Docker 多步構(gòu)建更小的 Java 鏡像 Docker Jav...

    honhon 評論0 收藏0
  • spring boot - 收藏集 - 掘金

    摘要:引入了新的環(huán)境和概要信息,是一種更揭秘與實(shí)戰(zhàn)六消息隊(duì)列篇掘金本文,講解如何集成,實(shí)現(xiàn)消息隊(duì)列。博客地址揭秘與實(shí)戰(zhàn)二數(shù)據(jù)緩存篇掘金本文,講解如何集成,實(shí)現(xiàn)緩存。 Spring Boot 揭秘與實(shí)戰(zhàn)(九) 應(yīng)用監(jiān)控篇 - HTTP 健康監(jiān)控 - 掘金Health 信息是從 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring...

    rollback 評論0 收藏0
  • 【推薦】最新200:技術(shù)文章整理

    摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語言和等其他語言的對比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯過的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...

    BicycleWarrior 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<