最近面試一些 Java 開發者,他們其中有些在公司實際用過 Spring Boot, 有些是本身興趣愛好在業餘本身學習過。然而,當我問他們 Spring Boot 最核心的 3 個註解是什麼,令我失望的是鮮有人能答上來,這樣你能說你對 Spring Boot 很瞭解嗎?這可能還會給你減分!java
更多請在Java技術棧微信公衆號後臺回覆關鍵字:boot。面試
Spring Boot 最大的特色是無需 XML 配置文件,能自動掃描包路徑裝載並注入對象,並能作到根據 classpath 下的 jar 包自動配置。spring
因此 Spring Boot 最核心的 3 個註解就是:微信
org.springframework.context.annotation.Configuration
這是 Spring 3.0 添加的一個註解,用來代替 applicationContext.xml 配置文件,全部這個配置文件裏面能作到的事情均可以經過這個註解所在類來進行註冊。架構
下面幾個相關注解也是很是重要的!app
@Bean分佈式
用來代替 XML 配置文件裏面的 <bean ...>
配置。源碼分析
@ImportResource學習
若是有些經過類的註冊方式配置不了的,能夠經過這個註解引入額外的 XML 配置文件,有些老的配置文件沒法經過 @Configuration
方式配置的很是管用。spa
@Import
用來引入額外的一個或者多個 @Configuration
修飾的配置文件類。
@SpringBootConfiguration
這個註解就是 @Configuration
註解的變體,只是用來修飾是 Spring Boot 配置而已,或者可利於 Spring Boot 後續的擴展,源碼以下。
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }
org.springframework.context.annotation.ComponentScan
這是 Spring 3.1 添加的一個註解,用來代替配置文件中的 component-scan
配置,開啓組件掃描,即自動掃描包路徑下的 @Component
註解進行註冊 bean 實例到 context 中。
另外,@ComponentScans
是可重複註解,便可以配置多個,用來配置註冊不一樣的子包。
關於重複註解,你們能夠看這篇文章《JAVA元註解@interface詳解》。
org.springframework.boot.autoconfigure.EnableAutoConfiguration
看全路徑就知道,這是自 Spring Boot 誕生時添加的註解,用來提供自動配置,上面的兩個都是 spring-context
包下的,不屬於 Spring Boot,因此 Spring 3.0 以後的去 XML 配置方式已經爲 Spring Boot 埋下了伏筆!
自動配置更多詳細使用及實戰能夠看這篇文章《Spring Boot自動配置原理、實戰》。
Spring Boot 最核心的 3 個註解介紹完了,你們可能會有疑問,爲何最主要的註解 @SpringBootApplication
不在其中?
留給你們的彩蛋,其實這個 @SpringBootApplication
註解就包含了以上 3 個主要註解,平時沒有自定義配置的需求,則使用 @SpringBootApplication
註解徹底就能夠了!
讓咱們來看下 @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 { ... }
看完漲姿式了嗎?
點贊轉發一下吧,之後碾壓面試官!
更多幹貨推薦
2.史上最強 Spring Boot & Cloud 教程整理
本文原創首發於微信公衆號:Java技術棧(id:javastack),關注公衆號在後臺回覆 "boot" 可獲取更多,轉載請原樣保留本信息。