Spring 4.x高級話題之Spring Aware、多線程、計劃任務、條件注解@Conditional、組合注解與元注解、@Enable*注解的工作原理、測試

一、Spring Aware

Spring的依賴注入的最大亮點就是你所有的Bean對Spring容器的存在是沒有意識的,即你可以將你的容器替換成別的容器,這時的Bean之間的耦合度很低。

但是在實際項目中,你不可避免的要用到Spring容器本身的功能資源,這時你的Bean必須要意識到Spring容器的存在,才能調用Spring所提供的資源,這就是所謂的Spring Aware。

Spring Aware本來就是Spring設計用來框架內部使用的,若使用了Spring Aware,你的Bean將會和Spring框架耦合。

二、多線程

Spring通過任務執行器(TaskExecutor)來實現多線程和并發配置。

使用ThreadPoolTaskExecutor可實現一個基于線程池的TaskExecutor。

實際開發中任務一般是非阻礙的,即異步的,所以我們要在配置類中通過@EnableAsync開啟對異步任務的支持,并通過在實際執行的Bean的方法中使用@Async注解來聲明其是一個異步任務。

三、計劃任務

從Spring3.1開始,計劃任務在Spring中的實現變得異常的簡單。

通過在配置類注解@EnableScheduling來開啟對計劃任務的支持,然后在要執行計劃任務的方法上注解@Scheduled聲明這是一個計劃任務。

四、條件注解@Conditional

@Conditional根據滿足某一個特定條件創建一個特定的Bean。就是根據特定條件來控制Bean的創建行為,這樣我們可以利用這個特性進行一些自動的配置。在Spring Boot中將會大量應用到條件注解。

五、組合注解與元注解

元注解是可以注解到別的注解上的注解,被注解的注解稱之為組合注解,組合注解具備注解其上的元注解的功能。

六、@Enable*注解的工作原理

@EnableAspectJAutoProxy? ? ? ? ? ? 開啟對AspectJ自動代理的支持。

@EnableAsync? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?開啟異步方法的支持。

@EnableScheduling? ? ? ? ? ? ? ? ? ? ? ?開啟計劃任務的支持。

@EnableWebMvc? ? ? ? ? ? ? ? ? ? ? ? ? ?開啟Web MVC的配置支持。

@EnableConfigurationProperties? ?開啟對@ConfigurationProperties配置Bean的支持。

@EnableJpaRepositories? ? ? ? ? ? ? ?開啟對Spring Data JPA Repository的支持。

@EnableTransactionManagement 開啟注解式事務的支持。

@EnableCaching? ? ? ? ? ? ? ? ? ? ? ? ? ? 開啟注解式的緩存支持。


通過查看源碼,發現所有的@Enable*注解都有一個@Import注解,@Import是用來導入配置類的,這就說明這些自動開啟的實現其實是導入了一些自動配置的Bean,這些導入的配置方式主要分為一下三種類型:

1.直接導入配置類:

2.依據條件選擇配置類:

3.動態注冊Bean:

七、測試

1.測試結果正確:

2.測試結果錯誤:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,958評論 6 342
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,947評論 18 139
  • 吃了三粒勞拉,還在頑強抵抗睡意
    貓小姐西酞普蘭閱讀 238評論 0 0
  • 蓮出淤泥而不染,蓮生長在一個獨特的土壤中,它沒有被自己的生長環境所影響,更沒有羨慕其它植物的生長環境,選擇欣...
    楊平的閱讀 218評論 6 0
  • 每次經過那片養鵝場,成群結隊的鵝或蹲著,或呆呆的站立著,個個膘肥,慵懶安靜,不叫不跑,那鵝,不是伸長了頭頸,...
    觀滄海明月閱讀 163評論 0 0