最近面試一些 Java 開發者,他們其中有些在公司實際用過 Spring Boot, 有些是自己興趣愛好在業余自己學習過。然而,當我問他們 Spring Boot 最核心的 3 個注解是什么,令我失望的是鮮有人能答上來,這樣你能說你對 Spring Boot 很了解嗎?這可能還會給你減分!
你所需具備的基礎
- 什么是 Spring Boot?
- Spring Boot 核心配置文件詳解
- Spring Boot 開啟的 2 種方式
- Spring Boot 自動配置原理、實戰
- Spring Boot 2.x 啟動全過程源碼分析
更多請在Java技術棧微信公眾號后台回復關鍵字:boot。
Spring Boot 核心注解講解
Spring Boot 最大的特點是無需 XML 配置文件,能自動掃描包路徑裝載並注入對象,並能做到根據 classpath 下的 jar 包自動配置。
所以 Spring Boot 最核心的 3 個注解就是:
1、@Configuration
org.springframework.context.annotation.Configuration
這是 Spring 3.0 添加的一個注解,用來代替 applicationContext.xml 配置文件,所有這個配置文件里面能做到的事情都可以通過這個注解所在類來進行注冊。
下面幾個相關注解也是非常重要的!
@Bean
用來代替 XML 配置文件里面的 <bean ...>
配置。
@ImportResource
如果有些通過類的注冊方式配置不了的,可以通過這個注解引入額外的 XML 配置文件,有些老的配置文件無法通過 @Configuration
方式配置的非常管用。
@Import
用來引入額外的一個或者多個 @Configuration
修飾的配置文件類。
@SpringBootConfiguration
這個注解就是 @Configuration
注解的變體,只是用來修飾是 Spring Boot 配置而已,或者可利於 Spring Boot 后續的擴展,源碼如下。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
2、@ComponentScan
org.springframework.context.annotation.ComponentScan
這是 Spring 3.1 添加的一個注解,用來代替配置文件中的 component-scan
配置,開啟組件掃描,即自動掃描包路徑下的 @Component
注解進行注冊 bean 實例到 context 中。
另外,@ComponentScans
是可重復注解,即可以配置多個,用來配置注冊不同的子包。
關於重復注解,大家可以看這篇文章《JAVA元注解@interface詳解》。
3、@EnableAutoConfiguration
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" 可獲取更多,轉載請原樣保留本信息。