亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

SpringBoot原理深入篇

gotham / 3449人閱讀

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

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

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

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

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

    
    
        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啟動(dòng)器)的依賴,項(xiàng)目就會(huì)自動(dòng)給我們導(dǎo)入關(guān)于WEB項(xiàng)目所需要的配置和JAR。如圖:

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

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

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

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

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

所以,到這里我們就可以知道,SpringBoot使用的是 @Configuration 的方式來配置IOC容器,@Configuration 就好比對(duì)應(yīng)我們?cè)瓉淼囊粋€(gè)XML配置文件(SpringBoot社區(qū)推薦使用基于JavaConfig的配置形式), 比如:

我們?cè)瓉硎沁@么寫:



 
    
    
      .....省略
    

而現(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í)例,都會(huì)注入到IOC容器中,而bean的id默認(rèn)為方法名。(注意:@Configuration 是spring的注解,不是springboot的,本身spring提供了JavaConfig的配置)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@SpringBootApplication

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

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

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

就是,嗯,注解我們剛剛看過了,我們現(xiàn)在來看看為什么mian方法執(zhí)行后,項(xiàng)目就直接啟動(dòng)了,我們?cè)賮砻橐谎踡ain方法:

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

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

點(diǎn)擊267行

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

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

到此,SpringBoot的啟動(dòng)執(zhí)行就差不多了,,后面我們?cè)趯⑾耂pringBoot的常用配置

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/72847.html

相關(guān)文章

  • Java后端

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

    joyvw 評(píng)論0 收藏0
  • java

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

    honhon 評(píng)論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 評(píng)論0 收藏0
  • 【推薦】最新200:技術(shù)文章整理

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

    BicycleWarrior 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<