Java 學習 --SpringBoot 常用註解詳解(二)

語言: CN / TW / HK

在日常 Java 開發或者說在日常 Java 學習中總會遇到各種各樣的註解,有 Spring 官方的註解,有自定義的註解,總之你在開發中一定會遇到註解的使用,也是有了註解才使得開發效率更高,也使得開發人員不用去關注 SpringBoot 內部實現,而只需要關注自身業務,在需要的時候直接使用註解即可,而無需再次開發公共功能,從而提高開發效率,那麼 SpringBoot 常用註解有哪些呢?我們繼續來看 Spring Bean 註解、Spring DI 註解、Bean Scops 註解以及 Spring Boot 註解

Spring Bean 註解

@ComponentScan

@ComponentScan 註解用於配置 Spring 需要掃描的被元件註解註釋的類所在的包。可以通過配置其 basePackages 屬性或者 value 屬性來配置需要掃描的包路徑。value 屬性是 basePackages 的別名,比如

@Component

@Component 註解用於標註一個普通的元件類,它沒有明確的業務範圍,只是通知 Spring 被此註解的類需要被納入到 Spring Bean 容器中並進行管理,比如

@Service

@Service 註解是 @Component 的一個延伸(特例),它用於標註業務邏輯類。與 @Component 註解一樣,被此註解標註的類,會自動被 Spring 所管理,比如

@Repository

@Repository 註解也是 @Component 註解的延伸,與 @Component 註解一樣,被此註解標註的類會被 Spring 自動管理起來,@Repository 註解用於標註 DAO 層的資料持久化類比如

Spring DI 註解

@DependsOn

@DependsOn 註解可以配置 Spring IoC 容器在初始化一個 Bean 之前,先初始化其他的 Bean 物件。

@Bean

@Bean 註解主要的作用是告知 Spring,被此註解所標註的類將需要納入到 Bean 管理工廠中,比如

Scops 註解

@Scope

@Scope 註解可以用來定義 @Component 標註的類的作用範圍以及 @Bean 所標記的類的作用範圍。@Scope 所限定的作用範圍有:singleton、prototype、request、session、globalSession 或者其他的自定義範圍。這裡以 prototype 為例子進行講解。

當一個 Spring Bean 被宣告為 prototype(原型模式)時,在每次需要使用到該類的時候,Spring IoC 容器都會初始化一個新的改類的例項。在定義一個 Bean 時,可以設定 Bean 的 scope 屬性為 prototype:scope=“prototype”,也可以使用 @Scope 註解設定。

當 @Scope 的作用範圍設定成 Singleton 時,被此註解所標註的類只會被 Spring IoC 容器初始化一次。在預設情況下,Spring IoC 容器所初始化的類例項都為 singleton。

容器配置註解

@Autowired

@Autowired 註解用於標記 Spring 將要解析和注入的依賴項。此註解可以作用在建構函式、欄位和 setter 方法上,比如

@Primary

當系統中需要配置多個具有相同型別的 bean 時,@Primary 可以定義這些 Bean 的優先順序,比如

@PostConstruct @PreDestroy

這兩個註解不屬於 Spring,它們是源於 JSR-250 中的兩個註解,位於 common-annotations.jar 中。@PostConstruct 註解用於標註在 Bean 被 Spring 初始化之前需要執行的方法,比如

@PreDestroy 註解用於標註 Bean 被銷燬前需要執行的方法,比如

@Qualifier

當系統中存在同一型別的多個 Bean 時,@Autowired 在進行依賴注入的時候就不知道該選擇哪一個實現類進行注入。此時,我們可以使用 @Qualifier 註解來微調,幫助 @Autowired 選擇正確的依賴項,比如

Spring Boot 註解

@SpringBootApplication

@SpringBootApplication 註解是一個快捷的配置註解,在被它標註的類中,可以定義一個或多個 Bean,並自動觸發自動配置 Bean 和自動掃描元件。此註解相當於 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 的組合,比如啟動類

@EnableAutoConfiguration

@EnableAutoConfiguration 註解用於通知 Spring,根據當前類路徑下引入的依賴包,自動配置與這些依賴包相關的配置項。

@ConditionalOnClass @ConditionalOnMissingClass

這兩個註解屬於類條件註解,它們根據是否存在某個類作為判斷依據來決定是否要執行某些配置。

@ConditionalOnBean @ConditionalOnMissingBean

這兩個註解屬於物件條件註解,根據是否存在某個物件作為依據來決定是否要執行某些配置方法。

@ConditionalOnProperty

@ConditionalOnProperty 註解會根據 Spring 配置檔案中的配置項是否滿足配置要求,從而決定是否要執行被其標註的方法,比如

@ConditionalOnResource

此註解用於檢測當某個配置檔案存在時,則觸發被其標註的方法。

@ConditionalOnWebApplication @ConditionalOnNotWebApplication

這兩個註解用於判斷當前的應用程式是否是 Web 應用程式。如果當前應用是 Web 應用程式,則使用 Spring WebApplicationContext,並定義其會話的生命週期。

@ConditionalExpression

此註解可以讓我們控制更細粒度的基於表示式的配置條件限制。當表示式滿足某個條件或者表示式為真的時候,將會執行被此註解標註的方法。

@Conditional

@Conditional 註解可以控制更為複雜的配置條件。在 Spring 內建的條件控制註解不滿足應用需求的時候,可以使用此註解定義自定義的控制條件,以達到自定義的要求,比如

總結

以上就是 SpringBoot 日常開發中常用註解的剩下部分,當然,這裡不是全部的註解,畢竟有一些註解使用頻率不高,這裡主要講解的是常用註解,對於使用頻率不高比較生僻的註解也是有存在的意義的,感興趣的小夥伴可以自行閱讀原始碼檢視。