Spring function util —— SingletonSupplier SupplierUtils

  • 前言
  • SingletonSupplier
  • SupplierUtils
  • demo
  • 总结

前言

Spring 针对 java function 提供了两个工具 API

  • SingletonSupplier
  • SupplierUtils

SingletonSupplier

public class SingletonSupplier<T> implements Supplier<T> {// 包装的真正的 Supplier@Nullableprivate final Supplier<? extends T> instanceSupplier;// 缺省回调@Nullableprivate final Supplier<? extends T> defaultSupplier;// 包装的实例@Nullableprivate volatile T singletonInstance;/*** 公开构造*/public SingletonSupplier(@Nullable T instance, Supplier<? extends T> defaultSupplier) {this.instanceSupplier = null;this.defaultSupplier = defaultSupplier;this.singletonInstance = instance;}public SingletonSupplier(@Nullable Supplier<? extends T> instanceSupplier, Supplier<? extends T> defaultSupplier) {this.instanceSupplier = instanceSupplier;this.defaultSupplier = defaultSupplier;}// 私有构造private SingletonSupplier(Supplier<? extends T> supplier) {this.instanceSupplier = supplier;this.defaultSupplier = null;}private SingletonSupplier(T singletonInstance) {this.instanceSupplier = null;this.defaultSupplier = null;this.singletonInstance = singletonInstance;}// 获取最终实例@Override@Nullablepublic T get() {T instance = this.singletonInstance;if (instance == null) {synchronized (this) {instance = this.singletonInstance;/*** 先从 instanceSupplier 获取,获取不到就从*       defaultSupplier 获取*/if (instance == null) {if (this.instanceSupplier != null) {instance = this.instanceSupplier.get();}if (instance == null && this.defaultSupplier != null) {instance = this.defaultSupplier.get();}this.singletonInstance = instance;}}}return instance;}// 该方法不会返回 null 的实例public T obtain() {T instance = get();Assert.state(instance != null, "No instance from Supplier");return instance;}/*** 静态构造*/public static <T> SingletonSupplier<T> of(T instance) {return new SingletonSupplier<>(instance);}@Nullablepublic static <T> SingletonSupplier<T> ofNullable(@Nullable T instance) {return (instance != null ? new SingletonSupplier<>(instance) : null);}public static <T> SingletonSupplier<T> of(Supplier<T> supplier) {return new SingletonSupplier<>(supplier);}@Nullablepublic static <T> SingletonSupplier<T> ofNullable(@Nullable Supplier<T> supplier) {return (supplier != null ? new SingletonSupplier<>(supplier) : null);}}
  • 一个维护单例的 Supplier,可以分别指定

    • instance:单例实例
    • instanceSupplier:单例 Supplier
    • defaultSupplier:缺省回调
  • get 方法获取最终单例实例
  • obtainNullSafeget
  • 提供了一系列静态构造方法

SupplierUtils

public abstract class SupplierUtils {/*** NullSafe 获取 Supplier 的实例*/@Nullablepublic static <T> T resolve(@Nullable Supplier<T> supplier) {return (supplier != null ? supplier.get() : null);}}
  • supplier.get()NullSafe 版本
  • 配合 SingletonSupplier 食用更佳

demo

public class SingletonSupplierDemo {@Testpublic void test() {SingletonSupplier<String> supplier= new SingletonSupplier<>(null, () -> "default");System.out.println(supplier.get());supplier = new SingletonSupplier<>(() -> "dd", () -> "default");System.out.println(supplier.get());supplier = SingletonSupplier.ofNullable("dd");System.out.println(supplier.get());supplier = SingletonSupplier.ofNullable(() -> "dd");System.out.println(supplier.get());System.out.println(SupplierUtils.resolve(supplier));}
}

总结

Spring 工具类

Spring function util —— SingletonSupplier SupplierUtils相关推荐

  1. 关于spring中util:/的配置

    解决redis设置缓存时间找到的帖子,我这个初学者需要学习的还是很多的. 原文地址:http://www.doc100.net/bugs/t/216322/index.html 探索<util/ ...

  2. util.promisify 的那些事儿

    util.promisify是在node.js 8.x版本中新增的一个工具,用于将老式的Error first callback转换为Promise对象,让老项目改造变得更为轻松. 在官方推出这个工具 ...

  3. javascript工具类(util)-持续更新

    2019独角兽企业重金招聘Python工程师标准>>> 同步更新github,并含有测试用例. 地址 https://github.com/bosscheng/javascript- ...

  4. Spring学习之Bean的配置

    本文将会介绍Spring框架中wiring beans的相关内容,包括:bean的声明与创建.在xml文件中对bean基本使用方法的配置以及Spring 3中新特性Spring Expression ...

  5. spring项目中加载配置文件

    spring配置properties或其他文件的方式: 1.通过spring的自带配置 <!-- properties配置文件加载 --><bean class="org. ...

  6. spring中的spel表达式语言

    spring in action第三版读书笔记 spring3.0引入了spring expression language(spel)语言,通过spel我们可以实现 1.通过bean的id对bean ...

  7. 玩转Spring——Spring IOC/DI

    什么是IOC ioc :Inversion of Control,即控制反转. 它不是一种技术,而是一种设计思想,即java程序中获取对象的方式发生反转,由最初的new方式创建,转变成由第三方框架创建 ...

  8. [spring]maven项目中获取resources资源目录路径

    项目的资源目录路径如下: package com.zzj.spring.boot.util; import java.io.*; import java.util.Properties; public ...

  9. [Spring实战系列](11)SpEL使用表达式装配

    到目前为止,我们为Bean 的属性和构造器参数装配的所有东西都是在Spring 的XML 配置文件中静态定义的. <bean id = "yoona" class = &qu ...

最新文章

  1. android用于打开各种文件的intent
  2. javascript学习-创建json对象数据,遍历
  3. 数学建模学习笔记(八)——分类模型
  4. 【重难点】【Java集合 02】Set、List、Map 的区别、常见的线程安全的集合类、Collection 为什么只能在 Iterator 中删除元素
  5. 自定义http报头_http协议报头详解HTTP协议结构
  6. atitit.ajax bp dwr 3.的注解方式配置使用流程总结 VO9o.....
  7. webstormjs文件全部报错_springboot启动报错org.yaml.snakeyaml.error.YAMLException...
  8. HTML 字体 大小 颜色对照表
  9. 用MDK调试AXF文件
  10. 对入门使用者比较友好的视频剪辑工具推荐
  11. 10min说完淘宝最初10年的产品故事
  12. vue 路由守卫 解析
  13. 【渝粤教育】广东开放大学 建设工程法规 形成性考核 (32)
  14. 台铁预计耗资120亿新台币改善东部危险弯道
  15. 如何做好公众号编辑—壹间网络
  16. 小程序推送代码到远程库
  17. lingo标准模型与编程(附习题、代码)
  18. 微信论坛交流小程序系统毕业设计毕设(8)毕业设计论文模板
  19. 校招c语言笔试题数组,华为校园招聘考试C语言C笔试题
  20. 在HTML中 表示内嵌CSS样式的标记,html怎么加css样式

热门文章

  1. pyspider 爬取结果 mysql_【已解决】PySpider中保存数据到mysql
  2. GitHub:今日头条机器人
  3. 热爱生活,余生不负自己!
  4. linux命令选择一行,linux【管道命令 PIPE】选取命令、排序命令、双向从定向、比较工具...
  5. EWSTM8系列教程01_IAR介绍、下载、安装和注册
  6. 震撼的视觉感,裸眼3d成为企业宣传最优选择
  7. 数据分析---逾期用户画像及不良贷款SQL分析
  8. 【模渲大师菜单功能】——13渲染文件
  9. 华里士公式的推导及其推广
  10. 【学生角度--一篇初学者绝对看得懂的mos分析】