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

网友投稿 314 2023-01-16


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

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

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

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

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

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

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

try {

RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(environment);

Map 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();

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

由于上面的两处代码都在 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/SpringBpxWPTxHenBootBindUtil.java

简单用法如下:

MapperProperties mapperProperties = SpringBootBindUtil.bind(

environment,

MapperProperties.class,

MapperProperties.PREFIX)http://;

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

总结

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用指定的JDK启动IDEA的三种方法
下一篇:实现接口中所有方法(实现一个接口必须实现所有方法)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~