spring属性绑定

 
 
 

Spring的属性绑定有很多种方式,比如:

  • @Value+spel表达式;
  • @ConfigurationProperties + spring-boot-configuration-processor依赖;
  • 动态注册BeanPostProcessor,在定义的配置bean装配期间依赖Binder or DataBinder完成属性的绑定;

每一种方式都有各自的优缺点,下面简单对比下。

  • @Value+spel表达式

这种方式使用灵活,针对个别属性的IOC很简单方便。但是在属性数量较多的情况下,每一个属性都需要配置表达式,用起来就比较麻烦了。同时,缺乏对数据的校验能力,没法在注入过程中对数据做类似jsr303校验。适合简单,数量较少的场合。

  • @ConfigurationProperties&动态注册BeanPostProcessor的方式

两者都会生成配置bean,将散列的属性聚合在一个声明的bean中进行收束,相比@Value有很大的进步。但是@ConfigurationProperties的方式要更灵活+编码量也会更少。不过其需要依赖springboot,对于spring环境的要求更高一点。动态注册的方式,仅依赖spring,相对依赖更能往下兼容一些。@ConfigurationProperties支持对注入内容做jsr303校验。

dubbo的配置绑定是用的动态注册Bean以及BeanPostProcessor的方式,基于DataBinder完成属性的绑定,依赖的是spring-context中的能力。@ConfigurationProperties是通过ConfigurationPropertiesBindingPostProcessor驱动Binder完成属性的绑定。本质上两者差不多,不过@ConfigurationProperties的实现更通用,依赖的是spring-boot提供的能力。

 

spring-boot-configuration-processor还可以针对标注了@ConfigurationProperties的配置属性文件动态生成对应的spring-configuration-metadata.json文件,方便使用时的动态提示与属性关联。

 

参考资料:

https://juejin.cn/post/6844904090439270408

https://www.xiefayang.com/2019/04/01/Spring%20Boot%20%E9%85%8D%E7%BD%AE%E7%BB%91%E5%AE%9A%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/

posted @ 2020-12-25 14:58  飞昂之雪  阅读(204)  评论(0编辑  收藏  举报