Java 學習 --SpringBoot 常用註解詳解(二)
在日常 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 日常開發中常用註解的剩下部分,當然,這裡不是全部的註解,畢竟有一些註解使用頻率不高,這裡主要講解的是常用註解,對於使用頻率不高比較生僻的註解也是有存在的意義的,感興趣的小夥伴可以自行閱讀原始碼檢視。
- 那些 Go 語言發展歷史上的重大決策
- 從趨勢到挑戰,一站式解讀作業系統運維和可觀測性
- 百萬級 Topic,騰訊雲的 Apache Pulsar 穩定性實踐
- Apache Doris 在思必馳的應用優化實踐:海量語音通話資料下,實時、離線一體的數倉架構設計實踐
- 愛數正式開源認知智慧開發框架 KWeaver
- 運維智慧化的三大關鍵技術
- “抄我的還‘反捅’我一刀”,Gary Marcus 發文駁斥圖靈獎得主 Yann LeCun
- 當出海成為必選項,企業如何構建全場景全生態技術底座?
- 數智底座必備能力三:快速構建創新應用
- Docker 多階段構建實戰 (multi-stage builds)
- 工作筆記之 SELECT 語句在 SAP ABAP 中的用法總結(上)
- 經久不衰的設計定律是不要讓我思考的設計
- 不要指望下一個像 GPT 這樣的大型語言模型會民主化
- Java 近期新聞:Helidon Níma、Spring Framework、MicroProfile、MicroStream、Kotlin 和 Piranha
- 一文入門 jQuery
- C 學習 ---__libc_open 函式的原理
- 監控系統工作原理
- 甲骨文新微服務框架 Helidon Níma:使用虛擬執行緒實現高效能
- 【雲原生 | 從零開始學 Kubernetes】二、使用 kubeadm 搭建 K8S 叢集
- Elasticsearch 聚合學習之四:結果排序