Spring function util —— SingletonSupplier SupplierUtils
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
方法获取最终单例实例obtain
是NullSafe
的get
- 提供了一系列静态构造方法
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相关推荐
- 关于spring中util:/的配置
解决redis设置缓存时间找到的帖子,我这个初学者需要学习的还是很多的. 原文地址:http://www.doc100.net/bugs/t/216322/index.html 探索<util/ ...
- util.promisify 的那些事儿
util.promisify是在node.js 8.x版本中新增的一个工具,用于将老式的Error first callback转换为Promise对象,让老项目改造变得更为轻松. 在官方推出这个工具 ...
- javascript工具类(util)-持续更新
2019独角兽企业重金招聘Python工程师标准>>> 同步更新github,并含有测试用例. 地址 https://github.com/bosscheng/javascript- ...
- Spring学习之Bean的配置
本文将会介绍Spring框架中wiring beans的相关内容,包括:bean的声明与创建.在xml文件中对bean基本使用方法的配置以及Spring 3中新特性Spring Expression ...
- spring项目中加载配置文件
spring配置properties或其他文件的方式: 1.通过spring的自带配置 <!-- properties配置文件加载 --><bean class="org. ...
- spring中的spel表达式语言
spring in action第三版读书笔记 spring3.0引入了spring expression language(spel)语言,通过spel我们可以实现 1.通过bean的id对bean ...
- 玩转Spring——Spring IOC/DI
什么是IOC ioc :Inversion of Control,即控制反转. 它不是一种技术,而是一种设计思想,即java程序中获取对象的方式发生反转,由最初的new方式创建,转变成由第三方框架创建 ...
- [spring]maven项目中获取resources资源目录路径
项目的资源目录路径如下: package com.zzj.spring.boot.util; import java.io.*; import java.util.Properties; public ...
- [Spring实战系列](11)SpEL使用表达式装配
到目前为止,我们为Bean 的属性和构造器参数装配的所有东西都是在Spring 的XML 配置文件中静态定义的. <bean id = "yoona" class = &qu ...
最新文章
- android用于打开各种文件的intent
- javascript学习-创建json对象数据,遍历
- 数学建模学习笔记(八)——分类模型
- 【重难点】【Java集合 02】Set、List、Map 的区别、常见的线程安全的集合类、Collection 为什么只能在 Iterator 中删除元素
- 自定义http报头_http协议报头详解HTTP协议结构
- atitit.ajax bp dwr 3.的注解方式配置使用流程总结 VO9o.....
- webstormjs文件全部报错_springboot启动报错org.yaml.snakeyaml.error.YAMLException...
- HTML 字体 大小 颜色对照表
- 用MDK调试AXF文件
- 对入门使用者比较友好的视频剪辑工具推荐
- 10min说完淘宝最初10年的产品故事
- vue 路由守卫 解析
- 【渝粤教育】广东开放大学 建设工程法规 形成性考核 (32)
- 台铁预计耗资120亿新台币改善东部危险弯道
- 如何做好公众号编辑—壹间网络
- 小程序推送代码到远程库
- lingo标准模型与编程(附习题、代码)
- 微信论坛交流小程序系统毕业设计毕设(8)毕业设计论文模板
- 校招c语言笔试题数组,华为校园招聘考试C语言C笔试题
- 在HTML中 表示内嵌CSS样式的标记,html怎么加css样式