SpringBoot開發自己的@Enable功能

2020-11-23 網易新聞

@Enable*是springboot中用來啟用某一個功能特性的一類註解。其中包括我們常用的@SpringBootApplication註解中用於開啟自動注入的Annotation@EnableAutoConfiguration,開啟異步方法的annotation@EnableAsync,開啟將配置文件中的屬性以bean的方式注入到IOC容器的annotation@EnableConfigurationProperties等。

隨便打開幾個@Enable*的源碼,比如@EnableSync,@EnableCircuitBreaker, @EnableCache
這些類中都有共同點使用了@Import註解

@Import 這個類的注釋是這麼說的:

Indicates one or more component classes to import — typically @Configuration classes.

@Import用來導入一個或多個類(bean被spring容器託管)、或者配置類(配置類裡面的Bean都會被spring容器託管)

在Spring4.2以後,@Import還支持導入普通的沒有@Configuration註解的類。

接下來就實現自定義的一個Enable

自定義註解類:

@Retention(RetentionPolicy.RUNTIME)@Import(Pack.class)public @interface EnablePack { int maxConnections() default 1000; }

Pack.java

public class Pack implements ImportAware, ApplicationContextAware { private ApplicationContext ctx ; private int maxConnections; @Override public void setImportMetadata(AnnotationMetadata annotationMetadata) { Map attributesMap = annotationMetadata.getAnnotationAttributes(EnablePack.class.getName()); AnnotationAttributes attrs = AnnotationAttributes.fromMap(attributesMap); this.maxConnections = attrs.getNumber("maxConnections"); System.out.println(ctx.getBean(ProductService.class)) ; System.out.println(this.maxConnections); } public void store(){ System.out.println(this.maxConnections); } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.ctx = applicationContext ; } }

ImportAware 接口主要配合@Import註解使用開啟xxx功能。這裡也可以通過繼承AdviceModeImportSelector或者直接實現ImportSelector接口 來實現我們的功能。

啟動類:

@SpringBootApplication@EnableCaching@EnablePack(maxConnections = 10000)public class UserServiceApplication { public static void main(String[] args) { SpringApplication.run(UserServiceApplication.class, args); }}

啟動服務後,在控制臺可以看到輸出信息。

完畢!!!

給個關注,轉發唄,謝謝!!!

Restful API設計規範

Java代碼開發規範

SpringBoot多數據源配置詳解

SpringBoot+Atomikos多數據源分布式事務

Spring MVC 異步請求方式

Spring MVC 異常處理方式

SpringMVC參數統一驗證方法

zookeeper實現分布式緩存

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺「網易號」用戶上傳並發布,本平臺僅提供信息存儲服務。

相關焦點

  • SpringBoot+GitLab+Docker+Jenkins實現持續集成下
    編寫SpringBoot項目Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。
  • ELK入門使用-與springboot集成
    /bin/logstash-plugin install logstash-codec-json_linesValidating logstash-codec-json_linesInstalling logstash-codec-json_linesInstallation successful接下來,我們直接編寫我們springboot需要的配置方案,新建config/logstash-sample.conf
  • [易學springboot]對controller層進行單元測試
    在springboot中進行單元測試,大家已經非常熟悉。我們通常測試的是service層和dao層。對controller層的直接測試可能進行的較少。下面介紹一下在SpringBoot中進行Controller層的Rest請求測試的方法。
  • Rocket-API 2.3.2 發布,基於 spring boot 的 API 敏捷開發框架
    功能新增或修改: 遠程部署重複判斷 添加mongo對象操作函數 mapping路徑匹配修改
  • 絕地求生enable anti-cheat是什麼意思?原因及解決方法
    enable anti-cheat絕地求生是最近非常火的一個吃雞遊戲,最近有些小夥伴就在說自己在登錄的時候遇到了絕地求生enable anti-cheat,這個是怎麼回事呢?怎麼辦?小編就為大家帶來了絕地求生enable anti-cheat原因及解決方法!
  • 絕地求生Enable Anti-cheat是什麼意思
    絕地求生enable anti-cheat到底是什麼意思呢,很多玩家在進入遊戲的時候會出現這個問題,這個選項到底選不選呢。下面還是小編來給大家簡單的介紹一下吧。enable anti-cheat英文看得懂的玩家可以看出這是啟用反作弊的意思,那麼意思就是這個遊戲反作弊系統的開啟選項。
  • 絕地求生Enable Anti-cheat是什麼意思 anti-cheat是什麼
    絕地求生Enable Anti-cheat是什麼意思 anti-cheat是什麼 絕地求生很多玩家在遊戲看到這個enable anti-cheat的單詞,不明白是什麼意思,到底要不要選擇點上呢?
  • 7個方法鍛鍊開發自己的右腦功能,讓大腦聰明靈活!
    想要讓大腦聰明靈活,鍛鍊開發自己的右腦功能很有必要。因為右腦活躍起來有助於我們打破各種各樣的思維定式,提高想像力和形象思維能力。那具體要如何開發右腦,協調左右腦的功能,更大限度地提高我們大腦的效率呢?都有助於大腦右半球的功能開發。3、發展空間認識每到一地或外出旅遊時,試著明確方位,分清東西南北,了解地形地貌或建築特色,培養空間認識能力。
  • 絕地求生enable anti-cheat是什麼意思 選項到底選不選
    絕地求生enable anti-cheat到底是什麼意思呢,很多玩家在進入遊戲的時候會出現這個問題,這個選項到底選不選呢。下面還是小編來給大家簡單的介紹一下吧。  enable anti-cheat英文看得懂的玩家可以看出這是啟用反作弊的意思,那麼意思就是這個遊戲反作弊系統的開啟選項。
  • 衣服動起來:MIT開發智能穿戴機器人
    To view this video please enable JavaScript, and consider upgrading to a web browser that supports HTML5 video
  • 科學家開發出光化學控制的DNA開關電路
    科學家開發出光化學控制的DNA開關電路 作者:小柯機器人 發布時間:2020/12/25 14:27:38 華東師範大學裴昊研究團隊開發出光化學控制的DNA開關電路,可用於邏輯和概率計算。
  • Firefox 不要的 3D 視圖功能,微軟將它引入 Chromium
    用過 Firefox 的用戶可能知道它的 3D 視圖或 Tilt 擴展,它有助於以三維模式查看頁面,不過Mozilla 刪除了這個功能,在 Firefox DevTools 中的這個功能已經不復存在了
  • 關於HybridApp與國內外移動應用開發中間件對比的疑惑
    不同的應用形態優勢與劣勢同樣明顯,這取決於具體的應用需求;執行效率、設備功能支持或是跨平臺需求,各種價值有時會相互衝突。HybridApp也無法兼具兩者優勢同時屏蔽劣勢,在不做取捨的情況下其特點不過是交集求和。比如,跨平臺需求與不同平臺Native View的協同。
  • 科學家開發出p16報告基因小鼠模型
    科學家開發出p16報告基因小鼠模型 作者:小柯機器人 發布時間:2020/9/22 14:27:33 日本東京大學Makoto Nakanishi研究小組開發出p16報告基因小鼠模型。
  • 功能食品開發新趨勢:滿足個性化需求 主食功能化
    面對這些健康問題,功能食品應該發揮怎樣的作用?應從哪個角度去開發功能食品?   11月20日,在中國食品報社主辦、中國保健協會食物營養與安全專業委員會承辦的2018中國營養健康產業企業家年會功能性食品發展論壇上,來自學術界、企業界人士就居民飲食結構變化導致的健康狀況及功能食品的開發思路進行了充分探討。
  • 鴻蒙Harmony 應用開發view-binding 插件,和findComponentById說再見
    - view-binding for harmony- 鴻蒙應用開發view-binding插件,消除findComponentById模版代碼- 無註解、編譯期間生成Binding類文件怎麼用?1.在feature模塊的build.gradle文件中引入view-binding插件apply plugin: 'com.huawei.ohos.hap'  apply plugin: 'com.eholee.plugin.view-binding'  ohos {  ...  }  viewBinding{  enable true  }  dependencies {  ...
  • 黃奇帆:加快形態開發功能開發 推動新區更好更快發展
    3月20日,市長黃奇帆在兩江新區調研時指出,兩江新區成立兩年多來,經過紮實有效的基礎開發,實現良好開局,今後要把工作重點轉向形態開發和功能開發,推動兩江新區更好更快發展。 黃奇帆先後考察了水土高新園項目規劃建設總體情況、萊寶高科項目推進情況、重慶超矽光電技術有限公司、新型半導體顯示器件、轎車等項目選址及建設推進情況、重慶兩路寸灘保稅港區水港功能區和兩江新區政務中心「一站式」審批服務大廳,並主持召開了兩江新區開發建設領導小組第八次工作會議。
  • 中科院教授:腦功能開發的關鍵期你抓住了嗎?還有救!
    男孩子由於他的語言功能差一些,就需要在小的時候多進行語言這方面的訓練,這些方面多給他開發開發,以後這方面也不會拉後腿。2思維方式上的差異依據男女接收方式上的不同,在思維方式、處理信息方式的不同,在訓練開發男孩女孩腦功能的時候,要依據不同的方法。
  • ThinkPHP也可以開發手機客戶端(TPM功能預覽)
    現在的你,如果僅僅擅長網站開發的話,那麼遠不能滿足市場需求了,適時地的進入手機客戶端開發已成為一種必然趨勢,那麼又從何入手呢?是選擇當前手機客戶端開發的主流語言?學java? 學objectc? 或是學phonegap? 作為一個web開發者,也許你更傾向於學習phonegap;作為一個PHP程式設計師,也盼望著有一天可以藉助於PHP實現手機客戶端的開發。
  • 視覺、語言、遊戲開發腦功能? 滬專家:興趣才是最好動力
    王桂松認為,大腦潛能開發有一定的科學性,但對於3到9歲兒童的左右腦開發並沒必要。腦潛能開發是一個腦優勢發揮和不斷強化的過程。目前對腦功能的認知以及腦區的工作協調機制還不是十分清楚。兒童大腦發育也是一個過程,很多功能在生長過程中逐漸完善。比如,上幼兒園、小學都有活動和課程,對大部分兒童已經足夠。記憶和遺忘本身是雙向的,不斷學習記憶的同時,也在不斷遺忘。信息量越多,遺忘也越多。