SpringBoot自動裝配原理詳解面試


Spring Boot自動裝配原理詳解

主程序類,主入口類

package com.kuang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootStudyApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootStudyApplication.class, args);
    }

}

​ @SpringBootApplication:spring boot應用標注在某個類上說明這個類是SpringBoot的主配置類,SpringBoot就應該運行這個類的main方法來啟動SpringBoot應用;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
@SpringBootConfiguration:Spring Boot的配置類;

​ 標注在某個類上,表示這是一個SpringBoot的配置類;

			@Configuration:配置類上標注這個注解;

​ 配置類-------配置文件:配置類也是容器中的一個組件;@Component

@EnableAutoConfiguration:開啟自動配置功能:

​ 以前我們需要配置的東西,SpringBoot幫我們自動配置:@EnableAutoConfiguration告訴SpringBoot開啟自動配置功能,這樣自動配置才能生效

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
				@AutoConfigurationPackage自動配置包

​ @Import(AutoConfigurationPackages.Registrar.class):

​ Spring的底層注解@import,給容器導入一個組件,導入的組件由AutoConfigurationPackages.Registrar.class;

​ 將主配置類(@SpringBootApplication)標注的類的所在包以及下面所有子包里面的所有組件掃描導Spring容器

				@Import(AutoConfigurationImportSelector.class):給容器導入組件

​ AutoConfigurationImportSelector:導入哪些組件的選擇器;

​ 將所有需要導入的組件以全類名的方式返回;這些組件會被添加其中

​ 會給容器中導入非常多的自動配置類(xxxAutoConfiguration):就是給容器中導入這個場景需要的所有組件,並配置好這些組件

有了自動配置類,免去了我們手動編寫配置注入功能組等的工作

​ SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,beanClassLoader)

​ (loadFactoryNames)方法,用類加載器獲取一個資源

​ 結論: SpringBoot不需要寫配置文件的原因是,SpringBoot所有配置都是在啟動的時候進行掃描並加載,SpringBoot的所有自動配置類都在Spring.factories里面,但是不一定會生效,生效前要判斷條件是否成立,只要導入了對應的start,就有對應的啟動器,有了啟動器就能幫我們進行自動配置類

以前我們需要自己配置的東西,自動配置類幫我們做了

  1. SpringBoot在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值
  2. 將這些值作為自動配置類導入容器 , 自動配置類就生效 , 幫我們進行自動配置工作;
  3. 整個J2EE的整體解決方案和自動配置都在springboot-autoconfigure的jar包中;
  4. 它會給容器中導入非常多的自動配置類 (xxxAutoConfiguration), 就是給容器中導入這個場景需要的所有組件 , 並配置好這些組件 ;
  5. 有了自動配置類 , 免去了我們手動編寫配置注入功能組件等的工作;

SpringBoot面試題

談談你對SpringBoot的理解

1.Spring的自動裝配原理:Spring Boot啟動的時候會通過@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自動配置類,並對其進行加載,這些自動配置類都是以AutoConfiguration結尾來命名的,它實際上就是一個JavaConfig形式的Spring容器配置類,通過@Bean導入到Spring容器中,以Properties結尾命名的類是和配置文件進行綁定的。它能通過這些以Properties結尾命名的類中取得在全局配置文件中配置的屬性,我們可以通過修改配置文件對應的屬性來修改自動配置的默認值,來完成自定義配置

2.run方法的作用

1、推斷應用的類型是普通的項目還是Web項目

2、查找並加載所有可用初始化器 , 設置到initializers屬性中

3、找出所有的應用程序監聽器,設置到listeners屬性中

4、推斷並設置main方法的定義類,找到運行的主類


免責聲明!

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



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