温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring中的配置怎么保证可扩展性

发布时间:2021-06-23 10:42:18 来源:亿速云 阅读:187 作者:chen 栏目:开发技术

本篇内容介绍了“Spring中的配置怎么保证可扩展性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

公司项目引用了一个依赖jar,配置封装太封闭了,不能扩展。业务变动一次那个jar就要跟着升级一次,而且不同的项目还引用了这个jar的不同版本。领导问我能不能给它搞成可扩展的,研究了一下,实现了可扩展定制化。

原本的配置类似是这样的:

@Configuration(proxyBeanMethods = false) public class MyConfiguration {      /**      * bean      */     @Bean     ConfigBean configBean(Config config)  {         //todo 逻辑      return new ConfigBean(config)     }      }

如果想根据项目的不同定制不同的ConfigBean就不太好弄了。如果能在Config对象传入ConfigBean构造之前放一个修改Config的口子就好了。这样ConfigBean的初始化生命周期也变成了

发现Config对象-> 修改Config对象-> 初始化ConfigBean

于是我定义了一个可以修改Config对象的接口:

@FunctionalInterface public interface ConfigCustomizer {      /**      * Customize.      *      * @param config the config      */     void customize(Config config); }

上面整个配置就变成这样的了:

@Configuration(proxyBeanMethods = false) public class MyConfiguration {     private List<ConfigCustomizer> configCustomizers = Collections.emptyList();     /**      * bean      */     @Bean     ConfigBean configBean(Config config)  {                  // 其它公共逻辑省略                  // 最后定制逻辑注入         configCustomizers                 .forEach(configCustomizer -> configCustomizer.customize(config));      return new ConfigBean(config)     }          @Autowired(required = false)     void setConfigCustomizers(List<ConfigCustomizer> configCustomizers) {         this.configCustomizers = configCustomizers;     } }

这样我们需要改动配置时只需要声明一个ConfigCustomizerBean即可,它会被setConfigCustomizers自动发现并执行自定义的方法。

这里会有朋友说@ConditionalOnMissingBean系列注解也能干这个事啊,没错!这样我们完全可以声明一个新的ConfigBean取而代之。但是这是两种策略:一种是修修补补就能用;一种是推到重来。我们在封装组件的时候要合理利用这些策略,该开口子的要开口子,不该开放的保持封闭,另外保证组件的扩展性也是很重要的。

“Spring中的配置怎么保证可扩展性”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI