javascript
Spring Boot 最核心的 3 个注解详解
最近面試一些 Java 開(kāi)發(fā)者,他們其中有些在公司實(shí)際用過(guò) Spring Boot, 有些是自己興趣愛(ài)好在業(yè)余自己學(xué)習(xí)過(guò)。
然而,當(dāng)我問(wèn)他們 Spring Boot 最核心的 3 個(gè)注解是什么,令我失望的是鮮有人能答上來(lái),這樣你能說(shuō)你對(duì) Spring Boot 很了解嗎?這可能還會(huì)給你減分!
?
你所需具備的基礎(chǔ)
-
什么是 Spring Boot?
-
Spring Boot 核心配置文件詳解
-
Spring Boot 開(kāi)啟的 2 種方式
-
Spring Boot 自動(dòng)配置原理、實(shí)戰(zhàn)
-
Spring Boot 2.x 啟動(dòng)全過(guò)程源碼分析
?
Spring Boot 核心注解講解
Spring Boot 最大的特點(diǎn)是無(wú)需 XML 配置文件,能自動(dòng)掃描包路徑裝載并注入對(duì)象,并能做到根據(jù) classpath 下的 jar 包自動(dòng)配置。
所以 Spring Boot 最核心的 3 個(gè)注解就是:
1、@Configuration
org.springframework.context.annotation.Configuration
這是 Spring 3.0 添加的一個(gè)注解,用來(lái)代替 applicationContext.xml 配置文件,所有這個(gè)配置文件里面能做到的事情都可以通過(guò)這個(gè)注解所在類(lèi)來(lái)進(jìn)行注冊(cè)。
下面幾個(gè)相關(guān)注解也是非常重要的!
@Bean
用來(lái)代替 XML 配置文件里面的?<bean ...>?配置。
@ImportResource
如果有些通過(guò)類(lèi)的注冊(cè)方式配置不了的,可以通過(guò)這個(gè)注解引入額外的 XML 配置文件,有些老的配置文件無(wú)法通過(guò)?@Configuration?方式配置的非常管用。
@Import
用來(lái)引入額外的一個(gè)或者多個(gè)?@Configuration?修飾的配置文件類(lèi)。
@SpringBootConfiguration
這個(gè)注解就是?@Configuration?注解的變體,只是用來(lái)修飾是 Spring Boot 配置而已,或者可利于 Spring Boot 后續(xù)的擴(kuò)展,源碼如下。
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public?@interface?SpringBootConfiguration?{}2、@ComponentScan
org.springframework.context.annotation.ComponentScan
這是 Spring 3.1 添加的一個(gè)注解,用來(lái)代替配置文件中的?component-scan?配置,開(kāi)啟組件掃描,即自動(dòng)掃描包路徑下的?@Component?注解進(jìn)行注冊(cè) bean 實(shí)例到 context 中。
另外,@ComponentScans?是可重復(fù)注解,即可以配置多個(gè),用來(lái)配置注冊(cè)不同的子包。
關(guān)于重復(fù)注解,大家可以看這篇文章《JAVA元注解@interface詳解》。
3、@EnableAutoConfiguration
org.springframework.boot.autoconfigure.EnableAutoConfiguration
看全路徑就知道,這是自 Spring Boot 誕生時(shí)添加的注解,用來(lái)提供自動(dòng)配置,上面的兩個(gè)都是?spring-context?包下的,不屬于 Spring Boot,所以 Spring 3.0 之后的去 XML 配置方式已經(jīng)為 Spring Boot 埋下了伏筆!
自動(dòng)配置更多詳細(xì)使用及實(shí)戰(zhàn)可以看這篇文章《Spring Boot自動(dòng)配置原理、實(shí)戰(zhàn)》。
?
最后的彩蛋
Spring Boot 最核心的 3 個(gè)注解介紹完了,大家可能會(huì)有疑問(wèn),為什么最主要的注解?@SpringBootApplication?不在其中?
留給大家的彩蛋,其實(shí)這個(gè)?@SpringBootApplication?注解就包含了以上 3 個(gè)主要注解,平時(shí)沒(méi)有自定義配置的需求,則使用?@SpringBootApplication?注解完全就可以了!
讓我們來(lái)看下?@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?{...}看完漲姿勢(shì)了嗎?
總結(jié)
以上是生活随笔為你收集整理的Spring Boot 最核心的 3 个注解详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 初窥Go module
- 下一篇: Spring 事务用法示例与实现原理