最近面試一些 Java 開發(fā)者,他們其中有些在公司實(shí)際用過(guò) Spring Boot, 有些是自己興趣愛好在業(yè)余自己學(xué)習(xí)過(guò)肪笋。
然而耕蝉,當(dāng)我問(wèn)他們 Spring Boot 最核心的 3 個(gè)注解是什么街夭,令我失望的是鮮有人能答上來(lái),這樣你能說(shuō)你對(duì) Spring Boot 很了解嗎九榔?這可能還會(huì)給你減分!
你所需具備的基礎(chǔ)
更多請(qǐng)?jiān)贘ava技術(shù)棧微信公眾號(hào)后臺(tái)回復(fù)關(guān)鍵字:boot哲泊。
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)進(jìn)行注冊(cè)。
下面幾個(gè)相關(guān)注解也是非常重要的犬缨!
@Bean
用來(lái)代替 XML 配置文件里面的 <bean ...>
配置喳魏。
@ImportResource
如果有些通過(guò)類的注冊(cè)方式配置不了的,可以通過(guò)這個(gè)注解引入額外的 XML 配置文件遍尺,有些老的配置文件無(wú)法通過(guò) @Configuration
方式配置的非常管用截酷。
@Import
用來(lái)引入額外的一個(gè)或者多個(gè) @Configuration
修飾的配置文件類。
@SpringBootConfiguration
這個(gè)注解就是 @Configuration
注解的變體乾戏,只是用來(lái)修飾是 Spring Boot 配置而已迂苛,或者可利于 Spring Boot 后續(xù)的擴(kuò)展,源碼如下鼓择。
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Configurationpublic @interface SpringBootConfiguration {}
2三幻、@ComponentScan
org.springframework.context.annotation.ComponentScan
這是 Spring 3.1 添加的一個(gè)注解,用來(lái)代替配置文件中的 component-scan
配置呐能,開啟組件掃描念搬,即自動(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 { ...}