有时候看源码,我们会受到一些启发。

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生成器类相关推荐

  1. spring core源码解读之ASM4用户手册翻译之一asm简介

    第一章:ASM介绍 1.1 ASM动机: 程序的分析,生成,转换技术可以应用到许多场景: 1.程序分析,从简单的语法解析到完整的语义分析,可以应用在程序中找到潜在的bug,发现无用的代码,工程代码的逆 ...

  2. Spring:源码解读Spring IOC原理

    2019独角兽企业重金招聘Python工程师标准>>> 一.什么是Ioc/DI? IOC容器:主要是完成了 完成对象的创建和依赖的管理注入等. 先从我们自己设计这样一个视角来考虑: ...

  3. 【细读Spring Boot源码】重中之重refresh()

    前言 版本:spring-boot-2.7.3 | spring-context-5.3.22 在Spring Boot启动过程中[细读Spring Boot源码]启动步骤 主流程详情7中applic ...

  4. 『互联网架构』软件架构-spring源码之spring结构概述

    spring从07年接触到目前2018年也差不多10年了,一个java的框架为什么能火这么多年.很多人对spring的使用轻车熟路,但是从未解读过spring的源码,老铁跟我一起看看源码,了解下内部的 ...

  5. Spring5源码 - 12 Spring事件监听机制_异步事件监听应用及源码解析

    文章目录 Pre 实现原理 应用 配置类 Event事件 事件监听 EventListener 发布事件 publishEvent 源码解析 (反推) Spring默认的事件广播器 SimpleApp ...

  6. Spring5源码 - 11 Spring事件监听机制_源码篇

    文章目录 pre 事件监听机制的实现原理[观察者模式] 事件 ApplicationEvent 事件监听者 ApplicationEvent 事件发布者 ApplicationEventMultica ...

  7. spring AOP源码分析(一)

    spring AOP源码分析(一) 对于springAOP的源码分析,我打算分三部分来讲解:1.配置文件的解析,解析为BeanDefination和其他信息然后注册到BeanFactory中:2.为目 ...

  8. Spring MVC源码——Root WebApplicationContext

    Spring MVC源码--Root WebApplicationContext 打算开始读一些框架的源码,先拿 Spring MVC 练练手,欢迎点击这里访问我的源码注释, SpringMVC官方文 ...

  9. Spring Framework 源码解析课程大纲

    首先明确我们读Spring Framework的源码的目的是什么? 是为了显示自己很牛X么? Spring源码阅读的难度在于其呢内容庞大,并不是里面有很复杂的算法,需要高智商才能理解.所以你搞懂了Sp ...

  10. Spring Cloud源码阅读(一)

    问题 Spring Cloud如何创建两个上下文环境的 Spring Cloud如何加载bootstrap.yml配置文件的 Spring Cloud Config是如何获取远程配置的 Spring ...

最新文章

  1. 股市币市:数据分析与交易所最新公告(20190302)
  2. jquery的文档处理(部分)
  3. 15.2 java中迭代器的注意事项
  4. 11.MapReduce第1部分
  5. 前端学习(505):垂直居中的第一种方式的优点和缺点
  6. 查找重复文件_重复文件查找和磁盘整理工具:Tidy Up
  7. excel亮灯怎么设置_EXCEL高手进,用EXCEL实现亮灯功能
  8. 【Android -- 性能优化】启动速度分析工具 — TraceView
  9. 2019-9-2-C#命令行解析工具
  10. 【php基础入门】小白整理PHP常用的字符串函数使用总结分析(推荐)
  11. sciter 进度条 百分比计算函数
  12. Python报错TypeError: Descriptors cannot not be created directly
  13. 原生 JS 实现一个瀑布流插件
  14. Arcgis ArcTutor数据下载
  15. 程序人生(创)一个新手程序员的两三事(未完待续...)
  16. .NET ZXING 生成带logo的二维码和普通二维码及条型码
  17. cmd下上传文件到ftp服务器,cmd上传文件到ftp服务器
  18. 老爷机怎么拯救?老爷机优化升级攻略
  19. 使用sympy进行表达式化简
  20. 请编写程序,由键盘录入一个字符串,统计字符串中英文字母和数字分别有多少个。 比如:Hello12345World中字母:10个,数字:5个。

热门文章

  1. 2022年 电工杯B题5G 网络环境下 应急物资配送问题
  2. 给服务器传文件的工具,向服务器传文件的工具
  3. SpringBoot单元测试@Test没有run的解决方法
  4. Unity3d 周分享(20期 2019.6.30 )
  5. SQLServer2016安装教程
  6. 【独家】小程序初体验及它带来的龙卷风
  7. ajax异步数据加载
  8. 使用Word的VBA功能过滤敏感词,实现网络文章过审
  9. iOS图片高斯模糊处理
  10. 幸运抽奖游戏系统带后台源码