Spring Boot核心原理


Spring Boot核心原理

spring-boot-starter-xxx  方便開發和配置

@SpringBootApplication    //注解
public class Springbootdemo1Application {

	public static void main(String[] args) {
                //嚴格意義上執行的是這塊代碼
		SpringApplication.run(Springbootdemo1Application.class, args);
	}

}
    

 

一、 SpringBootApplication注解

注解的功能:參考https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/reference/htmlsingle/#boot-documentation

 

除了元注解,還有三個注解

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan( excludeFilters =
    {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}

@SpringBootConfiguration 注解

 讓我們當前的Bean叫給Spring容器進行管理(IOC),讓當前類變成配置類,不需要XML文件進行配置(配置類)。

 
        
EnableAutoConfiguration注解

@AutoConfigurationPackage
  讓包中的類以及子包中的類能被自動掃描到Spring 容器中
@Import({AutoConfigurationImportSelector.class})
  程序中默認使用的類幫我們找到
AutoConfigurationImportSelector類如下: 里面的selectImports里面,調用了getAutoConfigurationEntry方法。

 

getAutoConfigurationEntry方法中調用getCandidateConfigurations方法

 

getCandidateConfigurations方法使用的文件在META-INF/spring.factories

META-INF/spring.factories保存了系統默認加載進來的類。
這個文件的路徑如下圖:

 

 
        
@ComponentScan注解
通常它會結合@Coponent相關東西進行使用

總結:@SpringBootApplication
結合Spring MVC:
系統可能用到的Bean,幫我們放在了spring.factories 文件夾中
自己需要加載的bean, @Component結合@ComponentScan

 

二、 SpringApplication.run(Springbootdemo1Application.class, args);

  程序啟動的時候執行這段代碼,

1、尋找內置的Tomcat執行的地方

this.refreshContext(context);
this.refresh(context);
((AbstractApplicationContext)applicationContext).refresh();
this.onRefresh()
onRefresh(ServletWebServerApplicationContext類中)
this.createWebServer();
 factory.getWebServer

      最終找到內置創建Tomcat的方法

 

 

2、@SpringBootApplicaton注解是如何准備類的? 如何理解spring.factories准備的類,然后拿到准備類去創建具體的對象?

     SpringApplication.run(Springbootdemo1Application.class, args):  拿到准備類中的文件--> 具體創建對象

    以下圖創建Tomcat實例為例

     

 

 spring.factories中有一個與TomcatServletWebServerFactory相關的配置: ServletWebServerFactoryAutoConfiguration

 

 ServletWebServerFactoryAutoConfiguration類如下

可以看到@Import({ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class, EmbeddedTomcat.class, EmbeddedJetty.class, EmbeddedUndertow.class})。

然后進入EmbeddedTomcat類

 

自動配置:auto-configuration

注解在spring.factories中幫你維護好了所謂的全路徑

代碼執行的過程中你會用到的話,就會尋找對應的類

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM