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

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

你所需具有的基礎

更多請在Java技術棧微信公衆號後臺回覆關鍵字:boot。面試

Spring Boot 核心註解講解

Spring Boot 最大的特色是無需 XML 配置文件,能自動掃描包路徑裝載並注入對象,並能作到根據 classpath 下的 jar 包自動配置。spring

因此 Spring Boot 最核心的 3 個註解就是:微信

一、@Configuration

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 {

}

二、@ComponentScan

org.springframework.context.annotation.ComponentScan

這是 Spring 3.1 添加的一個註解,用來代替配置文件中的 component-scan 配置,開啓組件掃描,即自動掃描包路徑下的 @Component 註解進行註冊 bean 實例到 context 中。

另外,@ComponentScans 是可重複註解,便可以配置多個,用來配置註冊不一樣的子包。

關於重複註解,你們能夠看這篇文章《JAVA元註解@interface詳解》。

三、@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" 可獲取更多,轉載請原樣保留本信息。

相關文章
相關標籤/搜索