唯一ID生成器

Spring提供了3个默认的唯一ID生成器。定义了抽象接口,我们也可以自定义

1
2
3
4
@FunctionalInterface
public interface IdGenerator {
UUID generateId();
}

1. SimpleIdGenerator

取值范围:从1开始到Long.MAX_VALUE

1
2
3
00000000-0000-0000-0000-000000000001
00000000-0000-0000-0000-000000000002
00000000-0000-0000-0000-000000000003

2. JdkIdGenerator

直接使用的UUID随机生成

1
2
3
c63482d8-7a87-465a-a421-ef52d1fedf42
8eafc317-d994-4a1f-884a-dc4911a6e12b
f969bef3-1d2b-448e-9272-8810db002fb9

3. AlternativeJdkIdGenerator

  • 安全的随机ID生成器. 取值:通过SecureRandom作为初始种子,然后使用Random生成。在安全和性能方面要比直接使用JDK方式更好

URL 解析和替换工具

解析工具类: UriComponents

使用方法:

1
2
3
4
var builder = UriComponentsBuilder.fromUriString("");
var builder = UriComponentsBuilder.fromHttpUrl("");

builder.host(""); // replace host

占位符解析

  • PropertyPlaceholderHelper
1
2
3
4
5
var helper = new PropertyPlaceholderHelper("${", "}") ;
var properties = new Properties() ;
properties.put("pack.name", "张三") ;
var value = helper.replacePlaceholders("${pack.name}", properties) ;
System.out.println(value) ;

路由路径匹配

RouteMatcher

Spring WebFlux 中用于路由匹配的接口,主要用于响应式编程中的路由配置.

Spring提供了 SimpleRouteMatcherPathPatternRouteMatcher 。建议使用 PathPatternRouteMatcher,该类的性能要比Simple高

1
2
3
4
5
6
7
8
String pattern = "/api-1/**" ;
PathPatternRouteMatcher routeMatcher = new PathPatternRouteMatcher() ;
Route route = routeMatcher.parseRoute("/api-1/users/666") ;
boolean ret = routeMatcher.match(pattern, route) ;
System.out.printf("ret = %b%n", ret) ;
route = routeMatcher.parseRoute("/api-2/demos") ;
ret = routeMatcher.match(pattern, route) ;
System.out.printf("ret = %b%n", ret) ;

AntPathMatcher

匹配路径. Ant 风格路径:支持 ?*** 等通配符。

1
2
3
AntPathMatcher matcher = new AntPathMatcher();
// true
boolean match = matcher.match("/user/*/profile", "/user/123/profile");

主要区别

特性 AntPathMatcher RouteMatcher
应用场景 传统 Spring MVC Spring WebFlux
路径风格 Ant 风格 支持路径变量、正则表达式等
编程模型 同步阻塞 异步非阻塞
使用范围 广泛用于 URL、文件路径匹配 专用于 WebFlux 路由配置

方法调用(MethodInvoker)

Spring提供了一个帮助类,方便以声明的方式执行方法的调用,支持静态方法,实例方法。其内部通过反射调用。当你需要通过反射的方式调用方法时,就可以使用该类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static class PersonService {
private void save(String name) {
System.out.printf("save...%s%n", name) ;
}
}

public static void main(String[] args) throws Exception {
MethodInvoker invoker = new MethodInvoker() ;
// 指定目标对象,如果是静态方法,那么直接指定Class对象
invoker.setTargetObject(new PersonService()) ;
// 指定目标方法名
invoker.setTargetMethod("save") ;
// 指定方法参数
invoker.setArguments("张三") ;
// 准备;必须调用,该方法会初始化反射相关
invoker.prepare() ;
// 执行调用
invoker.invoke() ;
}

获取进程ID

1. ApplicationPid

1
2
ApplicationPid pid = new ApplicationPid();
System.out.printf("进程ID: %s%n", pid.toString());

2. ApplicationListener

META-INF/spring.factories 中注册监听器

1
org.springframework.context.ApplicationListener=org.springframework.boot.context.ApplicationPidFileWriter

3. MXBean

1
String pid = ManagementFactory.getRuntimeMXBean().getName().split("@")[0]

应用运行主目录

ApplicationHome

1
2
ApplicationHome home = new ApplicationHome();
System.out.printf("dir: %s, source: %s%n", home.getDir(),home.getSource());

支持并发的本地缓存(LRU)

  • ConcurrentLruCache
1

并发资源访问控制

实例化对象 Instantiator

资源加载

加载: .properties,.xml,.yaml

  • PropertiesPropertySourceLoader
  • YamlPropertySourceLoader

获取basePackages

1
2
ConfigurableApplicationContext context;
AutoConfigurationPackages.get(context);

ResolvableType 泛型工具

记录方法执行耗时 StopWatch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
static StopWatch watch = new StopWatch("task") ;

public static void entry() throws Exception {
watch.start("task - 1");
System.out.println("TODO - 1") ;
TimeUnit.SECONDS.sleep(2) ;
watch.stop() ;
task2() ;
task3() ;
}
public static void task2() throws Exception {
watch.start("task - 2");
System.out.println("TODO - 2") ;
TimeUnit.SECONDS.sleep(1) ;
watch.stop() ;
}
public static void task3() throws Exception {
watch.start("task - 3");
System.out.println("TODO - 3") ;
TimeUnit.SECONDS.sleep(3) ;
watch.stop() ;
}

public static void main(String[] args) throws Exception {
entry() ;
System.out.println(watch.prettyPrint()) ;
}

工具Util

ReflectionUtils 反射

CollectionUtils 集合

ObjectUtils 对象

NumberUtils 数字

MimeTypeUtils 文件类型

DigestUtils 摘要

JavaVersion 获取Java版本

1
JavaVersion.getJavaVersion();

ApplicationTemp 应用临时目录

SystemProperties 系统属性/环境变量访问