日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

@import注解_Spring Boot 2 实战:@SpringBootApplication注解浅析

發布時間:2025/3/15 javascript 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 @import注解_Spring Boot 2 实战:@SpringBootApplication注解浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文轉載自本人技術博客:felord.cn 轉載請注明出處

1. 前言

Spring Boot 都會有一個名為 xxApplication 的啟動類,里面有一個標準的 java 應用的入口 main 方法,用于啟動 Spring Boot 應用項目。@SpringBootApplication 是Spring Boot的核心注解,作用在啟動類上,在通常情況下Spring Boot在啟動時會自動掃描 @SpringBootApplication 所在類的同級包及下級包里的所有 Bean 。為什么一個小小的注解就能發揮這么大的作用?今天我們來一探究竟。

2. @SpringBootApplication

我們就從@SpringBootApplication 注解源碼開始一步步揭開謎底。看看這個注解都干了什么。

2.1 @SpringBootApplication 源碼

@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) })

public @interface SpringBootApplication {

@AliasFor(annotation = EnableAutoConfiguration.class)

Class>[] exclude() default {};

@AliasFor(annotation = EnableAutoConfiguration.class)

String[] excludeName() default {};

@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")

String[] scanBasePackages() default {};

@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")

Class>[] scanBasePackageClasses() default {};

}

@SpringBootApplication 注解是個復合注解,集成了@ComponentScan, @EnableAutoConfiguration, @SpringBootConfiguration 三個注解。

2.2 @ComponentScan 注解

Spring里諸如@Service,@Repository,@Component,@Controller等用來向Spring IoC 容器注入bean。@ComponentScan注解就是用來自動掃描被這些注解標識的類,使得這些類被發現并最終注入Spring IoC容器。你也可以通過設置@ComponentScan中的basePackages,includeFilters,excludeFilters屬性來動態確定自動掃描包范圍和過濾規則。默認情況下:它掃描所有類型,并且掃描范圍是@ComponentScan注解所在配置類包及子包的類。

2.3 @EnableAutoConfiguration

@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class>[] exclude() default {}; String[] excludeName() default {};}

這也是個復合注解,該注解可以幫助 Spring Boot 應用將所有符合條件的 @Configuration 配置都加載到當前 Spring Boot 創建并使用的 IoC 容器中。該注解的的核心要屬于 @Import(AutoConfigurationImportSelector.class) ,AutoConfigurationImportSelector 是自動配置選擇器。其中注解@Import的作用是給容器中導入一個組件。

public class AutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLoaderAware, ResourceLoaderAware, BeanFactoryAware, EnvironmentAware, Ordered { private static final AutoConfigurationEntry EMPTY_ENTRY = new AutoConfigurationEntry(); private static final String[] NO_IMPORTS = {}; private static final Log logger = LogFactory .getLog(AutoConfigurationImportSelector.class); private static final String PROPERTY_NAME_AUTOCONFIGURE_EXCLUDE = "spring.autoconfigure.exclude"; private ConfigurableListableBeanFactory beanFactory; // 環境 private Environment environment; // 類加載 private ClassLoader beanClassLoader; // 資源加載 private ResourceLoader resourceLoader; //----省略方法--------}

該類實現了類加載器,資源加載器,BeanFactoryAware 和 EnvironmentAware,借助 SpringFactoriesLoader 工具類通過類似java SPI查找配置類的功能,實現了從 classpath 中搜尋所有 META-INF/spring.factories 配置文件,并將其中 org.springframework.boot.autoconfigure.EnableAutoConfiguration 對應的配置項通過反射實例化為標注了 @Configuration 的配置類,然后匯總加載到Spring IoC 容器。工作流程圖為(來源于網絡):

2.4 @SpringBootConfiguration 注解

@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }

@SpringBootConfiguration繼承自@Configuration,二者功能也一致,標注當前類是配置類,并會將當前類內聲明的一個或多個以@Bean注解標記的方法的實例納入到Spring IoC容器中,并且實例名就是方法名。 特別的是該注解標識這是一個 Spring Boot 項目。

3. 總結

我們簡單總結一下Spring Boot的啟動步驟。Spring Boot應用啟動main方法后執行了一系列事件邏輯(加載環境等等)有興趣可以去看源碼,然后

  • @SpringBootApplication起作用
  • @SpringBootConfiguration注入配置
  • 然后觸發了@EnableAutoConfiguration 的作用:
    • 首先@AutoConfigurationPackage這個組合注解。加載AutoConfigurationPackages.Registrar類,Registrar類導入到容器中,而Registrar類作用是掃描主配置類同級目錄以及子包,并將相應的組件導入到Spring Boot創建管理的容器中。
    • 然后將AutoConfigurationImportSelector導入到Spring IoC容器中,AutoConfigurationImportSelector作用是通過selectImports方法實現將配置類信息交給SpringFactoriesLoader進行一系列的容器創建過程,具體實現可查看上面的源碼。
  • @ComponentScan 掃描Spring Boot啟動類同級以及子包掃描其中的Bean并注入Spring IoC容器。
  • 總結

    以上是生活随笔為你收集整理的@import注解_Spring Boot 2 实战:@SpringBootApplication注解浅析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。