自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[399692]]

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

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

  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.     }      

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

  1. 發(fā)現(xiàn)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自動發(fā)現(xiàn)并執(zhí)行自定義的方法。

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

本文轉(zhuǎn)載自微信公眾號「碼農(nóng)小胖哥」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系碼農(nóng)小胖哥公眾號。

 

責(zé)任編輯:武曉燕 來源: 碼農(nóng)小胖哥
相關(guān)推薦

2021-09-02 09:42:11

測試軟件可擴展性開發(fā)

2022-09-05 15:17:34

區(qū)塊鏈比特幣可擴展性

2024-10-10 14:01:34

2021-12-03 14:41:00

云存儲可擴展性存儲

2010-02-26 15:07:20

WCF單例服務(wù)

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

區(qū)塊鏈比特幣可擴展性

2016-10-13 14:38:51

OpenStack可擴展性IT人員

2021-12-09 05:36:16

云存儲可擴展性數(shù)據(jù)存儲云存儲

2009-04-20 11:33:47

光網(wǎng)絡(luò)動態(tài)擴展

2017-01-05 19:29:10

公共云云存儲微軟

2023-10-11 13:46:26

緩存Web應(yīng)用程序

2020-04-18 11:04:35

物聯(lián)網(wǎng)工業(yè)物聯(lián)網(wǎng)技術(shù)

2020-09-09 14:32:13

邊緣計算

2009-04-16 17:53:09

SQL Server 應(yīng)用程序擴展性

2011-08-03 09:22:25

MySQL可擴展性

2023-06-15 15:40:36

2020-04-14 12:03:49

AI擴展性機器學(xué)習(xí)
點贊
收藏

51CTO技術(shù)棧公眾號