偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Spring中的配置如何保證可擴(kuò)展性

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

[[399692]]

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

原本的配置類(lèi)似是這樣的:

  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ù)項(xiàng)目的不同定制不同的ConfigBean就不太好弄了。如果能在Config對(duì)象傳入ConfigBean構(gòu)造之前放一個(gè)修改Config的口子就好了。這樣ConfigBean的初始化生命周期也變成了

  1. 發(fā)現(xiàn)Config對(duì)象-> 修改Config對(duì)象-> 初始化ConfigBean 

于是我定義了一個(gè)可以修改Config對(duì)象的接口:

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

上面整個(gè)配置就變成這樣的了:

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

這樣我們需要改動(dòng)配置時(shí)只需要聲明一個(gè)ConfigCustomizerBean即可,它會(huì)被setConfigCustomizers自動(dòng)發(fā)現(xiàn)并執(zhí)行自定義的方法。

這里會(huì)有朋友說(shuō)@ConditionalOnMissingBean系列注解也能干這個(gè)事啊,沒(méi)錯(cuò)!這樣我們完全可以聲明一個(gè)新的ConfigBean取而代之。但是這是兩種策略:一種是修修補(bǔ)補(bǔ)就能用;一種是推到重來(lái)。我們?cè)诜庋b組件的時(shí)候要合理利用這些策略,該開(kāi)口子的要開(kāi)口子,不該開(kāi)放的保持封閉,另外保證組件的擴(kuò)展性也是很重要的。

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

 

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

2021-09-02 09:42:11

測(cè)試軟件可擴(kuò)展性開(kāi)發(fā)

2022-09-05 15:17:34

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

2024-10-10 14:01:34

2021-12-03 14:41:00

云存儲(chǔ)可擴(kuò)展性存儲(chǔ)

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ū)塊鏈比特幣可擴(kuò)展性

2021-12-09 05:36:16

云存儲(chǔ)可擴(kuò)展性數(shù)據(jù)存儲(chǔ)云存儲(chǔ)

2016-10-13 14:38:51

OpenStack可擴(kuò)展性IT人員

2023-10-11 13:46:26

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

2017-01-05 19:29:10

公共云云存儲(chǔ)微軟

2009-04-20 11:33:47

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

2020-09-09 14:32:13

邊緣計(jì)算

2025-06-05 09:50:50

2020-04-18 11:04:35

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

2009-04-16 17:53:09

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

2011-08-03 09:22:25

MySQL可擴(kuò)展性

2023-06-15 15:40:36

點(diǎn)贊
收藏

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