开发者

SpringBoot中内置的49个常用工具类使用

目录
  • 字符串处理工具类
    • 1. StringUtils
    • 2. AntPathMatcher
    • 3. PatternMatchUtils
    • 4. PropertyPlaceholderHelper
  • 集合和数组工具类
    • 5. CollectionUtils
    • 6. MultiValueMap
    • 7. ConcurrentReferenceHashMap
    • 8. SystemPropertyUtils
  • 反射和类处理工具
    • 9. ReflectionUtils
    • 10. ClassUtils
    • 11. MethodInvoker
    • 12. BeanUtils
  • I/O和资源工具
    • 13. FileCopyUtils
    • 14. ResourceUtils
    • 15. StreamUtils
    • 16. FileSystemUtils
    • 17. ResourcePatternUtils
  • Web相关工具类
    • 18. WebUtils
    • 19. UriUtils
    • 20. UriComponentsBuilder
    • 21. ContentCachingRequestWrapper
    • 22. htmlUtils
  • 验证和断言工具
    • 23. Assert
    • 24. ObjectUtils
    • 25. NumberUtils
  • 日期和时间工具
    • 26. DateTimeUtils
    • 27. StopWatch
  • 安全相关工具
    • 28. DigestUtils
    • 29. Base64Utils
    • 30. CryptoUtils
  • jsON和数据转换工具
    • 31. JsonUtils
    • 32. TypeUtils
    • 33. MappingJackson2HttpMessageConverter
  • 其他实用工具
    • 34. RandomStringUtils
    • 35. CompletableFutureUtils
    • 36. CacheControl
    • 37. AnnotationUtils
    • 38. DefaphpultConversionService
    • 39. HeaderUtils
    • 40. MediaTypeFactory
    • 41. MimeTypeUtils
    • 42. WebClientUtils
    • 43. PropertySourceUtils
    • 44. EventPublishingUtils
    • 45. LocaleContextHolder
    • 46. AopUtils
    • 47. ProxyUtils
    • 48. ClassPathScanningCandidateComponentProvider
    • 49. YamlUtils
  • 总结

    SpringBoot以其强大的自动配置和丰富的生态系统成为Java开发的首选框架。

    除了核心功能外,SpringBoot及其依赖的Spring框架还包含大量实用工具类,它们可以显著简化日常开发工作。

    本文将介绍49个常用工具类,并通过简洁的代码示例展示它们的基本用法。

    字符串处理工具类

    1. StringUtils

    import org.springframework.util.StringUtils;
    
    // 检查字符串是否为空
    boolean isEmpty = StringUtils.isEmpty(null);  // true
    boolean isEmpty2 = StringUtils.isEmpty("");  // true
    
    // 检查字符串是否有文本内容
    boolean hasText = StringUtils.hasText("  ");  // false
    boolean hasText2 = StringUtils.hasText("hello");  // true
    
    // 分割字符串
    String[] parts = StringUtils.tokenizeToStringArray("a,b,c", ",");
    
    // 清除首尾空白
    String trimmed = StringUtils.trimWhitespace("  hello  ");  // "hello"

    2. AntPathMatcher

    import org.springframework.util.AntPathMatcher;
    
    AntPathMatcher matcher = new AntPathMatcher();
    boolean match1 = matcher.match("/users/*", "/users/123");  // true
    boolean match2 = matcher.match("/users/**", "/users/123/orders");  // true
    boolean match3 = matcher.match("/user?", "/user1");  // true
    
    // 提取路径变量
    Map<String, String> vars = matcher.extractUriTemplateVariables(
        "/users/{id}", "/users/42");  // {id=42}

    3. PatternMatchUtils

    import org.springframework.util.PatternMatchUtils;
    
    boolean matches1 = PatternMatchUtils.simpleMatch("user*", "username");  // true
    boolean matches2 = PatternMatchUtils.simpleMatch("user?", "user1");  // true
    boolean matches3 = PatternMatchUtils.simpleMatch(
        new String[]{"user*", "admin*"}, "username");  // true

    4. PropertyPlaceholderHelper

    import org.springframework.util.PropertyPlaceholderHelper;
    
    PropertyPlaceholderHelper helper = new PropertyPlaceholderHelper("${", "}");
    Properties props = new Properties();
    props.setProperty("name", "World");
    props.setProperty("greeting", "Hello ${name}!");
    
    String result = helper.replacePlaceholders("${gr编程客栈eeting}", props::getProperty);
    // "Hello World!"

    集合和数组工具类

    5. CollectionUtils

    import org.springframework.util.CollectionUtils;
    
    // 检查集合是否为空
    boolean isEmpty = CollectionUtils.isEmpty(null);  // true
    boolean isEmpty2 = CollectionUtils.isEmpty(Collections.emptyList());  // true
    
    // 集合操作
    List<String> list1 = Arrays.asList("a", "b", "c");
    List<String> list2 = Arrays.asList("b", "c", "d");
    Collection<String> intersection = CollectionUtils.intersection(list1, list2);  // [b, c]
    
    // 合并集合
    List<String> target = new ArrayList<>();
    CollectionUtils.mergeArrayIntoCollection(new String[]{"a", "b"}, target);

    6. MultiValueMap

    import org.springframework.util.LinkedMultiValueMap;
    import org.springframework.util.MultiValueMap;
    
    MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
    map.add("colors", "red");
    map.add("colors", "blue");
    map.add("sizes", "large");
    
    List<String> colors = map.get("colors");  // [red, blue]

    7. ConcurrentReferenceHashMap

    import org.springframework.util.ConcurrentReferenceHashMap;
    
    // 创建高并发场景下的引用Map (类似WeakHashMap但线程安全)
    Map<String, Object> cache = new ConcurrentReferenceHashMap<>();
    cache.put("key1", new LargeObject());

    8. SystemPropertyUtils

    import org.springframework.util.SystemPropertyUtils;
    
    // 解析含系统属性的字符串
    String javaHome = SystemPropertyUtils.resolvePlaceholders("${java.home}");
    String pathWithDefault = SystemPropertyUtils.resolvePlaceholders(
        "${unknown.property:default}");  // "default"

    反射和类处理工具

    9. ReflectionUtils

    import org.springframework.util.ReflectionUtils;
    
    // 获取类的字段
    Field field = ReflectionUtils.findField(Person.class, "name");
    ReflectionUtils.makeAccessible(field);
    ReflectionUtils.setField(field, person, "John");
    
    // 调用方法
    Method method = ReflectionUtils.findMethod(Person.class, "setAge", int.class);
    ReflectionUtils.makeAccessible(method);
    ReflectionUtils.invokeMethod(method, person, 30);
    
    // 字段回调
    ReflectionUtils.doWithFields(Person.class, field -> {
        System.out.println(field.getName());
    });

    10. ClassUtils

    import org.springframework.util.ClassUtils;
    
    // 获取类名
    String shortName = ClassUtils.getShortName("org.example.MyClass");  // "MyClass"
    
    // 检查类是否存在
    boolean exists = ClassUtils.isPresent("java.util.List", null);  // true
    
    // 获取所有接口
    Class<?>[] interfaces = ClassUtils.getAllInterfaces(ArrayList.class);
    
    // 获取用户定义的类加载器
    ClassLoader classLoader = ClassUtils.getDefaultClassLoader();

    11. MethodInvoker

    import org.springframework.util.MethodInvoker;
    
    MethodInvoker invoker = new MethodInvoker();
    invoker.setTargetObject(new MyService());
    invoker.setTargetMethod("calculateTotal");
    invoker.setArguments(new Object[]{100, 0.2});
    invoker.prepare();
    Object result = invoker.invoke();

    12. BeanUtils

    import org.springframework.beans.BeanUtils;
    
    // 复制属性
    Person source = new Person("John", 30);
    Person target = new Person();
    BeanUtils.copyProperties(source, target);
    
    // 实例化类
    Person newperson = BeanUtils.instantiateClass(Person.class);
    
    // 查找方法
    Method method = BeanUtils.findMethod(Person.class, "setName", String.class);

    I/O和资源工具

    13. FileCopyUtils

    import org.springframework.util.FileCopyUtils;
    
    // 复制文件内容
    byte[] bytes = FileCopyUtils.copyToByteArray(new File("input.txt"));
    FileCopyUtils.copy(bytes, new File("output.txt"));
    
    // 读取文本
    String content = FileCopyUtils.copyToString(
        new InputStreamReader(new FileInputStream("input.txt"), "UTF-8"));
    
    // 流复制
    FileCopyUtils.copy(inputStream, outputStream);

    14. ResourceUtils

    import org.springframework.util.ResourceUtils;
    
    // 获取文件
    File file = ResourceUtils.getFile("classpath:config.properties");
    
    // 检查是否是URL
    boolean isUrl = ResourceUtils.isUrl("http://example.com");
    
    // 获取URL
    URL url = ResourceUtils.getURL("classpath:data.json");

    15. StreamUtils

    import org.springframework.util.StreamUtils;
    
    // 流操作
    byte[] data = StreamUtils.copyToByteArray(inputStream);
    String text = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
    StreamUtils.copy(inputStream, outputStream);
    StreamUtils.copy("Hello", StandardCharsets.UTF_8, outputStream);

    16. FileSystemUtils

    import org.springframework.util.FileSystemUtils;
    
    // 删除目录
    boolean deleted = FileSystemUtils.deleteRecursively(new File("/tmp/test"));
    
    // 复制目录
    FileSystemUtils.copyRecursively(new File("source"), new File("target"));

    17. ResourcePatternUtils

    import org.springframework.core.io.Resource;
    import org.springframework.core.io.support.ResourcePatternUtils;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    
    // 获取匹配资源
    Resource[] resources = ResourcePatternUtils.getResourcePatternResolver(
        new PathMatchingResourcePatternResolver())
        .getResources("classpath*:META-INF/*.XML");

    Web相关工具类

    18. WebUtils

    import org.springframework.web.util.WebUtils;
    import javax.servlet.http.HttpServletRequest;
    
    // 获取Cookie
    Cookie cookie = WebUtils.getCookie(request, "sessionId");
    
    // 获取请求路径
    String path = WebUtils.getLookupPathForRequest(request);
    
    // 从请求中获取参数
    int pageSize = WebUtils.getIntParameter(request, "pageSize", 10);

    19. UriUtils

    import org.springframework.web.util.UriUtils;
    
    // 编解码URI组件
    String encoded = UriUtils.encodePathSegment("path with spaces", "UTF-8");
    String decoded = UriUtils.decode(encoded, "UTF-8");

    20. UriComponentsBuilder

    import org.springframework.web.util.UriComponentsBuilder;
    
    // 构建URI
    URI uri = UriComponentsBuilder.fromHttpUrl("http://example.com")
        .path("/products")
        .queryParam("category", "books")
        .queryParam("sort", "price")
        .build()
        .toUri();

    21. ContentCachingRequestWrapper

    import org.springframework.web.util.ContentCachingRequestWrapper;
    import javax.servlet.http.HttpServletRequest;
    
    ContentCachingRequestWrapper wrapper = new ContentCachingRequestW编程客栈rapper(request);
    // 请求处理后
    byte[] body = wrapper.getContentAsByteArray();

    22. HtmlUtils

    import org.springframework.web.util.HtmlUtils;
    
    // HTML转义
    String escaped = HtmlUtils.htmlEscape("<script>alert('XSS')</script>");
    // &lt;script&gt;alert('XSS')&lt;/script&gt;
    
    // HTML反转义
    String unescaped = HtmlUtils.htmlUnescape("&lt;b&gt;Bold&lt;/b&gt;");
    // Bold

    验证和断言工具

    23. Assert

    import org.springframework.util.Assert;
    
    // 常用断言
    Assert.notNull(object, "Object must not be null");
    Assert.hasText(name, "Name must not be empty");
    Assert.isTrue(amount > 0, "Amount must be positive");
    Assert.notEmpty(items, "Items must not be empty");
    Assert.state(isInitialized, "Service is not initialized");

    24. ObjectUtils

    import org.springframework.util.ObjectUtils;
    
    // 对象工具
    boolean isEmpty = ObjectUtils.isEmpty(null);  // true
    boolean isEmpty2 = ObjectUtils.isEmpty(new String[0]);  // true
    
    String nullSafe = ObjectUtils.nullSafeToString(null);  // "null"
    boolean equals = ObjectUtils.nullSafeEquals(obj1, obj2);
    
    // 默认值
    String value = ObjectUtils.getOrDefault(null, "default");

    25. NumberUtils

    import org.springframework.util.NumberUtils;
    
    // 数字转换
    Integer parsed = NumberUtils.parseNumber("42", Integer.class);
    Double converted = NumberUtils.convertNumberToTargetClass(42, Double.class);

    日期和时间工具

    26. DateTimeUtils

    import org.springframework.format.datetime.DateTimeFormatUtils;
    import java.util.Date;
    
    // 格式化日期
    String formatted = DateTimeFormatUtils.getDateTimeInstance().format(new Date());

    27. StopWatch

    import org.springframework.util.StopWatch;
    
    // 计时工具
    StopWatch watch = new StopWatch("TaskName");
    watch.start("phase1");
    // 执行任务1
    Thread.sleep(100);
    watch.stop();
    
    watch.start("phase2");
    // 执行任务2
    Thread.sleep(200);
    watch.stop();
    
    // 输出报告
    System.out.println(watch.prettyPrint());
    System.out.println("Total time: " + watch.getTotalTimeMillis() + "ms");

    安全相关工具

    28. DigestUtils

    import org.springframework.util.DigestUtils;
    
    // MD5哈希
    String md5 = DigestUtils.md5DigestAsHex("password".getBytes());
    
    // 文件MD5
    String fileMd5;
    try (InputStream is = new FileInputStream("file.txt")) {
        fileMd5 = DigestUtils.md5DigestAsHex(is);
    }

    29. Base64Utils

    import org.springframework.util.Base64Utils;
    
    // Base64编解码
    byte[] data = "Hello World".getBytes();
    String encoded = Base64Utils.encodeToString(data);
    byte[] decoded = Base64Utils.decodeFromString(encoded);

    30. CryptoUtils

    import org.springframework.security.crypto.encrypt.Encryptors;
    import org.springframework.security.crypto.encrypt.TextEncryptor;
    
    // 文本加密
    String password = "secret";
    String salt = "deadbeef";
    TextEncryptor encryptor = Encryptors.text(password, salt);
    String encrypted = encryptor.encrypt("Message");
    String decrypted = encryptor.decrypt(encrypted);

    JSON和数据转换工具

    31. JsonUtils

    import org.springframework.boot.json.JsonParser;
    import org.springframework.boot.json.JsonParserFactory;
    
    // JSON解析
    JsonParser parser = JsonParserFactory.getJsonParser();
    Map<String, Object> parsed = parser.parseMap("{"name":"John", "age":30}");
    List<Object> parsedList = parser.parseList("[1, 2, 3]");

    32. TypeUtils

    import org.springframework.core.ResolvableType;
    
    // 类型解析
    ResolvableType type = ResolvableType.forClass(List.class);
    ResolvableTypejs elementType = type.getGeneric(0);
    
    // 泛型类型处理
    ResolvableType mapType = ResolvableType.forClassWithGenerics(
        Map.class, String.class, Integer.class);

    33. MappingJackson2HttpMessageConverter

    import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    // 自定义JSON转换器
    ObjectMapper mapper = new ObjectMapper();
    // 配置mapper
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(mapper);

    其他实用工具

    34. RandomStringUtils

    import org.apache.commons.lang3.RandomStringUtils;
    
    // 随机字符串生成
    String random = RandomStringUtils.randomAlphanumeric(10);
    String randomLetters = RandomStringUtils.randomAlphabetic(8);
    String randomNumeric = RandomStringUtils.randomNumeric(6);

    35. CompletableFutureUtils

    import javaYIUUc.util.concurrent.CompletableFuture;
    import java.util.List;
    import java.util.stream.Collectors;
    
    // 合并多个CompletableFuture结果
    List<CompletableFuture<String>> futures = /* 多个异步操作 */;
    CompletableFuture<List<String>> allResults = CompletableFuture.allOf(
        futures.toArray(new CompletableFuture[0]))
        .thenApply(v -> futures.stream()
            .map(CompletableFuture::join)
            .collect(Collectors.toList()));

    36. CacheControl

    import org.springframework.http.CacheControl;
    import java.util.concurrent.TimeUnit;
    
    // 缓存控制
    CacheControl cacheControl = CacheControl.maxAge(1, TimeUnit.HOURS)
        .noTransform()
        .mustRevalidate();
    
    String headerValue = cacheControl.getHeaderValue();

    37. AnnotationUtils

    import org.springframework.core.annotation.AnnotationUtils;
    
    // 查找注解
    Component annotation = AnnotationUtils.findAnnotation(MyClass.class, Component.class);
    
    // 获取注解属性
    String value = AnnotationUtils.getValue(annotation, "value").toString();
    
    // 合并注解
    Component mergedAnnotation = AnnotationUtils.synthesizeAnnotation(
        annotation, MyClass.class);

    38. DefaultConversionService

    import org.springframework.core.convert.support.DefaultConversionService;
    
    // 类型转换
    DefaultConversionService conversionService = new DefaultConversionService();
    String strValue = "42";
    Integer intValue = conversionService.convert(strValue, Integer.class);

    39. HeaderUtils

    import org.springframework.http.HttpHeaders;
    
    // HTTP头处理
    HttpHeaders headers = new HttpHeaders();
    headers.add("Content-Type", "application/json");
    headers.setContentLength(1024);
    headers.setCacheControl("max-age=3600");

    40. MediaTypeFactory

    import org.springframework.http.MediaType;
    import org.springframework.http.MediaTypeFactory;
    import java.util.Optional;
    
    // 根据文件名推断媒体类型
    Optional<MediaType> mediaType = MediaTypeFactory.getMediaType("document.pdf");
    // application/pdf

    41. MimeTypeUtils

    import org.springframework.util.MimeTypeUtils;
    
    // MIME类型常量和解析
    boolean isCompatible = MimeTypeUtils.APPLICATION_JSON.isCompatibleWith(
        MimeTypeUtils.APPLICATION_JSON_UTF8);

    42. WebClientUtils

    import org.springframework.web.reactive.function.client.WebClient;
    import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
    
    // 创建WebClient
    WebClient webClient = WebClient.builder()
        .baseUrl("https://api.example.com")
        .defaultHeader("Authorization", "Bearer token")
        .filter(ExchangeFilterFunction.ofRequestProcessor(
            clientRequest -> {
                // 请求处理
                return Mono.just(clientRequest);
            }))
        .build();

    43. PropertySourceUtils

    import org.springframework.core.env.PropertySource;
    import org.springframework.core.env.StandardEnvironment;
    
    // 添加属性源
    StandardEnvironment env = new StandardEnvironment();
    Map<String, Object> map = new HashMap<>();
    map.put("app.name", "MyApp");
    env.getPropertySources().addFirst(new MapPropertySource("my-properties", map));

    44. EventPublishingUtils

    import org.springframework.context.ApplicationEventPublisher;
    
    // 发布事件
    ApplicationEventPublisher publisher = /* 获取发布器 */;
    publisher.publishEvent(new CustomEvent("Something happened"));

    45. LocaleContextHolder

    import org.springframework.context.i18n.LocaleContextHolder;
    import java.util.Locale;
    
    // 获取/设置当前语言环境
    Locale currentLocale = LocaleContextHolder.getLocale();
    LocaleContextHolder.setLocale(Locale.FRENCH);

    46. AopUtils

    import org.springframework.aop.support.AopUtils;
    
    // AOP工具方法
    boolean isAopProxy = AopUtils.isAopProxy(bean);
    boolean isCglibProxy = AopUtils.isCglibProxy(bean);
    Class<?> targetClass = AopUtils.getTargetClass(bean);

    47. ProxyUtils

    import org.springframework.aop.framework.ProxyFactory;
    
    // 创建代理
    ProxyFactory factory = new ProxyFactory(targetObject);
    factory.addInterface(MyInterface.class);
    factory.addAdvice(new MyMethodInterceptor());
    MyInterface proxy = (MyInterface) factory.getProxy();

    48. ClassPathScanningCandidateComponentProvider

    import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
    
    // 扫描类路径
    ClassPathScanningCandidateComponentProvider scanner = 
        new ClassPathScanningCandidateComponentProvider(true);
    scanner.addIncludeFilter(new AnnotationTypeFilter(Component.class));
    Set<BeanDefinition> beans = scanner.findCandidateComponents("org.example");

    49. YamlUtils

    import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
    import org.springframework.core.io.ClassPathResource;
    
    // 解析YAML文件
    YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
    yaml.setResources(new ClassPathResource("application.yml"));
    Properties properties = yaml.getObject();

    总结

    这些工具类涵盖了Java开发中的大部分常见场景,从基础的字符串处理到高级的反射操作,从文件IO到安全加密,从Web开发到性能监控。

    熟练掌握这些工具类可以显著提高开发效率,减少样板代码,并帮助编写更健壮的应用程序。

    在日常开发中,建议养成查看Spring和SpringBoot文档的习惯,挖掘更多有用的工具类。

    以上就是SpringBoot中内置的49个常用工具类使用的详细内容,更多关于SpringBoot内置工具类的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜