当前位置: 首页 > 科技观察

Spring中的配置如何保证扩展性

时间:2023-03-14 10:53:33 科技观察

公司项目引用依赖jar,配置包太封闭,无法扩展。一旦业务发生变化,jar就需要升级,不同的项目也会引用这个jar的不同版本。领导问我能不能做到可扩展,研究了一下,实现了可扩展定制。原来的配置是类似这样的:@Configuration(proxyBeanMethods=false)publicclassMyConfiguration{/***bean*/@BeanConfigBeanconfigBean(Configconfig){//todologicreturnnewConfigBean(config)}}如果要根据不同的自定义不同的ConfigBean项目不是那么容易做的。如果能在Config对象传入ConfigBean构造之前打个洞修改Config就好了。这样,ConfigBean的初始化生命周期也变成了发现Config对象->修改Config对象->初始化ConfigBean所以我定义了一个可以修改Config对象的接口:@FunctionalInterfacepublicinterfaceConfigCustomizer{/***Customize.**@paramconfigtheconfig*/voidcustomize(Configconfig);}上面的整个配置就变成了这样:@Configuration(proxyBeanMethods=false)publicclassMyConfiguration{privateListconfigCustomizers=Collections.emptyList();/***bean*/@BeanConfigBeanconfigBean(Configconfig){//其他公共逻辑省略//最后在configCustomizers.forEach(configCustomizer->configCustomizer.customize(config));returnnewConfigBean(config)}@Autowired(required=false)voidsetConfigCustomizers(ListconfigCustomizers){this.configCustomizers中注入自定义逻辑=configCustomizers;}}这样,当我们需要更改配置时,只需要声明一个ConfigCustomizerBean,它就会被自动di由setConfigCustomizers发现并执行自定义方法。这里有小伙伴会说@ConditionalOnMissingBean系列注解也可以这样做,没错!这样,我们就可以声明一个新的ConfigBean来替换它。但这是两种策略:一种是修修补补后再使用;另一种是推动它重新开始。我们在封装组件时应该合理利用这些策略。开口要打开,不该打开的要保持关闭。另外,保证组件的可扩展性也很重要。本文转载自微信公众号“码农小胖哥”,可通过以下二维码关注。转载本文请联系码农小胖公众号。