Spring Boot 最核心的 3 個注解詳解


最近面試一些 Java 開發者,他們其中有些在公司實際用過 Spring Boot, 有些是自己興趣愛好在業余自己學習過。然而,當我問他們 Spring Boot 最核心的 3 個注解是什么,令我失望的是鮮有人能答上來,這樣你能說你對 Spring Boot 很了解嗎?這可能還會給你減分!

你所需具備的基礎

更多請在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 {

    ...

}

看完漲姿勢了嗎?

點贊轉發一下吧,以后碾壓面試官!


更多干貨推薦

1.史上最強 Java 中高級面試題整理

2.史上最強 Spring Boot & Cloud 教程整理

3.史上最強架構設計分布式技術干貨整理

本文原創首發於微信公眾號:Java技術棧(id:javastack),關注公眾號在后台回復 "boot" 可獲取更多,轉載請原樣保留本信息。


免責聲明!

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



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