唯一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("");
|
占位符解析
- 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提供了 SimpleRouteMatcher 与 PathPatternRouteMatcher 。建议使用 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();
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() ; 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)
并发资源访问控制
实例化对象 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 系统属性/环境变量访问