Spring-core源码 -- AlternativeJdkIdGenerator Spring的UUID生成器类
有时候看源码,我们会受到一些启发。
spring-core中的AlternativeJdkIdGenerator类,一个生成UUID的类,仔细研究一下 发现他和UUID的randomUUID很相似。
public class AlternativeJdkIdGenerator implements IdGenerator {private final Random random;public AlternativeJdkIdGenerator() {SecureRandom secureRandom = new SecureRandom();byte[] seed = new byte[8];/*生成用户指定的随机字节数*/secureRandom.nextBytes(seed);this.random = new Random(new BigInteger(seed).longValue());}@Overridepublic UUID generateId() {byte[] randomBytes = new byte[16];/*生成随机字节并将其放入用户提供的字节数组中。产生的随机字节数等于字节数组的长度。*/this.random.nextBytes(randomBytes);/*UUID的最高有效位*/long mostSigBits = 0;for (int i = 0; i < 8; i++) {mostSigBits = (mostSigBits << 8) | (randomBytes[i] & 0xff);}/*UUID的最低有效位*/long leastSigBits = 0;for (int i = 8; i < 16; i++) {leastSigBits = (leastSigBits << 8) | (randomBytes[i] & 0xff);}return new UUID(mostSigBits, leastSigBits);}
}
下面是UUID的randomUUID方法:
public static UUID randomUUID() {SecureRandom ng = Holder.numberGenerator;byte[] randomBytes = new byte[16];ng.nextBytes(randomBytes);randomBytes[6] &= 0x0f; /* clear version */randomBytes[6] |= 0x40; /* set to version 4 */randomBytes[8] &= 0x3f; /* clear variant */randomBytes[8] |= 0x80; /* set to IETF variant */return new UUID(randomBytes);}
private UUID(byte[] data) {long msb = 0;long lsb = 0;assert data.length == 16 : "data must be 16 bytes in length";for (int i=0; i<8; i++)msb = (msb << 8) | (data[i] & 0xff);for (int i=8; i<16; i++)lsb = (lsb << 8) | (data[i] & 0xff);this.mostSigBits = msb;this.leastSigBits = lsb;}
其实AlternativeJdkIdGenerator就是spring自定义的UUID生成器。唯一的区别就在于UUID最高/最低有效位。
Spring-core源码 -- AlternativeJdkIdGenerator Spring的UUID生成器类相关推荐
- spring core源码解读之ASM4用户手册翻译之一asm简介
第一章:ASM介绍 1.1 ASM动机: 程序的分析,生成,转换技术可以应用到许多场景: 1.程序分析,从简单的语法解析到完整的语义分析,可以应用在程序中找到潜在的bug,发现无用的代码,工程代码的逆 ...
- Spring:源码解读Spring IOC原理
2019独角兽企业重金招聘Python工程师标准>>> 一.什么是Ioc/DI? IOC容器:主要是完成了 完成对象的创建和依赖的管理注入等. 先从我们自己设计这样一个视角来考虑: ...
- 【细读Spring Boot源码】重中之重refresh()
前言 版本:spring-boot-2.7.3 | spring-context-5.3.22 在Spring Boot启动过程中[细读Spring Boot源码]启动步骤 主流程详情7中applic ...
- 『互联网架构』软件架构-spring源码之spring结构概述
spring从07年接触到目前2018年也差不多10年了,一个java的框架为什么能火这么多年.很多人对spring的使用轻车熟路,但是从未解读过spring的源码,老铁跟我一起看看源码,了解下内部的 ...
- Spring5源码 - 12 Spring事件监听机制_异步事件监听应用及源码解析
文章目录 Pre 实现原理 应用 配置类 Event事件 事件监听 EventListener 发布事件 publishEvent 源码解析 (反推) Spring默认的事件广播器 SimpleApp ...
- Spring5源码 - 11 Spring事件监听机制_源码篇
文章目录 pre 事件监听机制的实现原理[观察者模式] 事件 ApplicationEvent 事件监听者 ApplicationEvent 事件发布者 ApplicationEventMultica ...
- spring AOP源码分析(一)
spring AOP源码分析(一) 对于springAOP的源码分析,我打算分三部分来讲解:1.配置文件的解析,解析为BeanDefination和其他信息然后注册到BeanFactory中:2.为目 ...
- Spring MVC源码——Root WebApplicationContext
Spring MVC源码--Root WebApplicationContext 打算开始读一些框架的源码,先拿 Spring MVC 练练手,欢迎点击这里访问我的源码注释, SpringMVC官方文 ...
- Spring Framework 源码解析课程大纲
首先明确我们读Spring Framework的源码的目的是什么? 是为了显示自己很牛X么? Spring源码阅读的难度在于其呢内容庞大,并不是里面有很复杂的算法,需要高智商才能理解.所以你搞懂了Sp ...
- Spring Cloud源码阅读(一)
问题 Spring Cloud如何创建两个上下文环境的 Spring Cloud如何加载bootstrap.yml配置文件的 Spring Cloud Config是如何获取远程配置的 Spring ...
最新文章
- 股市币市:数据分析与交易所最新公告(20190302)
- jquery的文档处理(部分)
- 15.2 java中迭代器的注意事项
- 11.MapReduce第1部分
- 前端学习(505):垂直居中的第一种方式的优点和缺点
- 查找重复文件_重复文件查找和磁盘整理工具:Tidy Up
- excel亮灯怎么设置_EXCEL高手进,用EXCEL实现亮灯功能
- 【Android -- 性能优化】启动速度分析工具 — TraceView
- 2019-9-2-C#命令行解析工具
- 【php基础入门】小白整理PHP常用的字符串函数使用总结分析(推荐)
- sciter 进度条 百分比计算函数
- Python报错TypeError: Descriptors cannot not be created directly
- 原生 JS 实现一个瀑布流插件
- Arcgis ArcTutor数据下载
- 程序人生(创)一个新手程序员的两三事(未完待续...)
- .NET ZXING 生成带logo的二维码和普通二维码及条型码
- cmd下上传文件到ftp服务器,cmd上传文件到ftp服务器
- 老爷机怎么拯救?老爷机优化升级攻略
- 使用sympy进行表达式化简
- 请编写程序,由键盘录入一个字符串,统计字符串中英文字母和数字分别有多少个。 比如:Hello12345World中字母:10个,数字:5个。