当前位置: 首页 > 编程笔记 >

兼容Spring Boot 1.x和2.x配置类参数绑定的工具类SpringBootBindUtil

阳航
2023-03-14
本文向大家介绍兼容Spring Boot 1.x和2.x配置类参数绑定的工具类SpringBootBindUtil,包括了兼容Spring Boot 1.x和2.x配置类参数绑定的工具类SpringBootBindUtil的使用技巧和注意事项,需要的朋友参考一下

为了让我提供的通用 Mapper 的 boot-starter 同时兼容 Spring Boot 1.x 和 2.x,增加了这么一个工具类。

在 Spring Boot 中,能够直接注入 XXProperties 类的地方不需要使用这个工具类。

但是在Spring 的接口和启动流程设计中,有些情况下只能通过EnvironmentAware接口得到Environment对象,此时你想得到 XXProperties 类没有更好的办法。

也许有人直接从Environment 对象中遍历获取所有的配置信息,但是有一个无法完美解决的问题就是relax 值,例如first-name,firstName, FIRST_NAME都可以代表同一个参数,在自己代码中很难处理这种情况。

通用 Mapper 在兼容两者过程中遇到过很多 BUG,这一次通过一个工具类解决了这个问题。

在 Spring Boot 1.x 中,可以通过下面代码绑定参数到对象:

try {
  RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(environment);
  Map<String, Object> properties = resolver.getSubProperties("");
  //targetClass 目标类型,例如 MapperProperties
  T target = targetClass.newInstance();
  RelaxedDataBinder binder = new RelaxedDataBinder(target, prefix);
  binder.bind(new MutablePropertyValues(properties));
  return target;
} catch (Exception e) {
  throw new RuntimeException(e);
}

Spring Boot 2.x 中,绑定更简单,如下:

Binder binder = Binder.get(environment);
return binder.bind(prefix, targetClass).get();

上面这两段代码也是最近才找到,要不然这个功能会出现的更早。

由于上面的两处代码都在 spring-boot.jar 中,因此编译时不能同时依赖两个不同的版本,而且为了方便以后项目依赖从 1.x 升级到 2.x,因此针对上面两处代码全部使用反射实现。

源码地址:https://github.com/abel533/mapper-boot-starter/blob/master/mapper-spring-boot-autoconfigure/src/main/java/tk/mybatis/spring/mapper/SpringBootBindUtil.java

简单用法如下:

MapperProperties mapperProperties = SpringBootBindUtil.bind(
    environment, 
    MapperProperties.class, 
    MapperProperties.PREFIX);

至此通过environment就能得到想要的配置类了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。如果你想了解更多相关内容请查看下面相关链接

 类似资料:
  • 很好的一天。我不熟悉使用VSCode键入脚本。 获取以下错误: > 错误TS2322:类型'()= 代码: DTO。输电系统 LinkedObject.ts 我正在尝试使用上述接口方法实例化类: TravelClientFormPopulator.ts 任何帮助都将不胜感激。

  • 由于 Angular 2.x 是在正文中引导的,因此如何在正文标签上添加 (在我的应用程序之外)? 我的应用程序组件看起来像

  • 我使用Android Studio 2.0预览4。我使用Android SDK工具25 rc1。无论我清理/重建项目多少次,这个错误都会持续存在。文件- 建筑梯度锉 美娜ctivity.java 主要活动。xml 这是我的顶级版本。梯度锉

  • 文件名:SimpleCalculator活动。JAVA Xml文件名:simple_calculator。xml 我收到错误消息Data Binding Android-Type参数T的上限不兼容:行

  • 问题内容: 有什么方法可以手动指定Log4J 2.x 文件位置(例如在Log4J 1.x中),而又不会弄乱类路径和系统属性? 问题答案: 您可以在中使用static方法(请参见此处的源代码)。(您可以为类加载器传递null。) 请注意,此类不是公共API的一部分,因此 您的代码可能会随任何次要发行版而中断 。 为了完整起见,您还可以使用以下系统属性指定配置文件的位置:

  • 有没有办法手动指定Log4J 2. x文件位置(如Log4J 1. x中的),而不会扰乱类路径和系统属性?