成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring中的配置如何保證可擴展性

開發 架構
公司項目引用了一個依賴jar,配置封裝太封閉了,不能擴展。業務變動一次那個jar就要跟著升級一次,而且不同的項目還引用了這個jar的不同版本。

[[399692]]

公司項目引用了一個依賴jar,配置封裝太封閉了,不能擴展。業務變動一次那個jar就要跟著升級一次,而且不同的項目還引用了這個jar的不同版本。領導問我能不能給它搞成可擴展的,研究了一下,實現了可擴展定制化。

原本的配置類似是這樣的:

  1. @Configuration(proxyBeanMethods = false
  2. public class MyConfiguration { 
  3.  
  4.     /** 
  5.      * bean 
  6.      */ 
  7.     @Bean 
  8.     ConfigBean configBean(Config config)  { 
  9.         //todo 邏輯 
  10.      return new ConfigBean(config) 
  11.     }      

如果想根據項目的不同定制不同的ConfigBean就不太好弄了。如果能在Config對象傳入ConfigBean構造之前放一個修改Config的口子就好了。這樣ConfigBean的初始化生命周期也變成了

  1. 發現Config對象-> 修改Config對象-> 初始化ConfigBean 

于是我定義了一個可以修改Config對象的接口:

  1. @FunctionalInterface 
  2. public interface ConfigCustomizer { 
  3.  
  4.     /** 
  5.      * Customize. 
  6.      * 
  7.      * @param config the config 
  8.      */ 
  9.     void customize(Config config); 

上面整個配置就變成這樣的了:

  1. @Configuration(proxyBeanMethods = false
  2. public class MyConfiguration { 
  3.     private List<ConfigCustomizer> configCustomizers = Collections.emptyList(); 
  4.     /** 
  5.      * bean 
  6.      */ 
  7.     @Bean 
  8.     ConfigBean configBean(Config config)  { 
  9.          
  10.         // 其它公共邏輯省略 
  11.          
  12.         // 最后定制邏輯注入 
  13.         configCustomizers 
  14.                 .forEach(configCustomizer -> configCustomizer.customize(config)); 
  15.      return new ConfigBean(config) 
  16.     } 
  17.      
  18.     @Autowired(required = false
  19.     void setConfigCustomizers(List<ConfigCustomizer> configCustomizers) { 
  20.         this.configCustomizers = configCustomizers; 
  21.     } 

這樣我們需要改動配置時只需要聲明一個ConfigCustomizerBean即可,它會被setConfigCustomizers自動發現并執行自定義的方法。

這里會有朋友說@ConditionalOnMissingBean系列注解也能干這個事啊,沒錯!這樣我們完全可以聲明一個新的ConfigBean取而代之。但是這是兩種策略:一種是修修補補就能用;一種是推到重來。我們在封裝組件的時候要合理利用這些策略,該開口子的要開口子,不該開放的保持封閉,另外保證組件的擴展性也是很重要的。

本文轉載自微信公眾號「碼農小胖哥」,可以通過以下二維碼關注。轉載本文請聯系碼農小胖哥公眾號。

 

責任編輯:武曉燕 來源: 碼農小胖哥
相關推薦

2021-09-02 09:42:11

測試軟件可擴展性開發

2022-09-05 15:17:34

區塊鏈比特幣可擴展性

2024-10-10 14:01:34

2021-12-03 14:41:00

云存儲可擴展性存儲

2010-02-26 15:07:20

WCF單例服務

2023-05-17 15:53:21

2020-08-18 08:04:16

DubboSPI框架

2012-06-04 11:04:46

虛擬化

2022-05-13 16:05:03

區塊鏈比特幣可擴展性

2016-10-13 14:38:51

OpenStack可擴展性IT人員

2021-12-09 05:36:16

云存儲可擴展性數據存儲云存儲

2023-10-11 13:46:26

緩存Web應用程序

2009-04-20 11:33:47

光網絡動態擴展

2017-01-05 19:29:10

公共云云存儲微軟

2020-09-09 14:32:13

邊緣計算

2020-04-18 11:04:35

物聯網工業物聯網技術

2025-06-05 09:50:50

2011-08-03 09:22:25

MySQL可擴展性

2009-04-16 17:53:09

SQL Server 應用程序擴展性

2023-06-15 15:40:36

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费欧美视频 | www.欧美| 91 在线 | 久久狠狠| 亚洲欧美久久 | 国产香蕉视频 | 日本涩涩网 | 亚洲综合一区二区三区 | 欧美mv日韩mv国产网站91进入 | 日韩在线看片 | 黄色大片毛片 | 久久高清免费视频 | 本道综合精品 | 久久精品视频在线观看 | 一区二区视频 | a视频在线观看 | 亚洲欧美日韩激情 | 午夜影院污 | 亚洲一区二区三区久久 | 免费国产一区二区 | 成人一区av| 国产午夜在线观看 | 日韩在线视频一区 | 日本激情视频网 | 91精品国产乱码麻豆白嫩 | 狠狠天天 | 久久中文字幕视频 | 麻豆久久久久久久久久 | 夜夜爽99久久国产综合精品女不卡 | 精久久| 九九导航| 每日更新av | 久久久久久黄 | 一二三四在线视频观看社区 | www九色| 第四色狠狠| 国产精品免费小视频 | 欧美三级不卡 | 日本福利在线 | 91精品国产乱码久久久久久久久 | 中文字幕99 |