当前位置: 首页 > ds >正文

Spring Boot 内置工具类汇总与讲解

Spring Boot 提供了许多内置工具类,这些类大多继承自 Spring Framework,旨在简化常见开发任务(如配置处理、资源加载、Bean 操作等)。以下是常用的工具类及其典型应用场景:


1. 应用启动与配置工具

  • SpringApplication
    用于启动 Spring Boot 应用的核心类,支持自定义 Banner、配置文件、监听器等。
    示例:SpringApplication.run(MyApp.class, args);

  • SpringApplicationBuilder
    链式 API 构建应用,支持多环境配置、父子上下文等。
    示例:

    new SpringApplicationBuilder(MyApp.class).profiles("dev").run(args);
    
  • ApplicationArguments
    解析命令行参数,区分 --key=value 格式和非选项参数。
    示例:

    @Autowired
    private ApplicationArguments args;
    List<String> nonOptionArgs = args.getNonOptionArgs();
    

2. 环境配置与属性读取

  • Environment
    获取应用配置(如 application.properties 中的属性、系统变量等)。
    示例:

    @Autowired
    private Environment env;
    String port = env.getProperty("server.port");
    
  • @ConfigurationProperties
    将配置属性绑定到 Java 对象,支持类型安全访问。
    示例:

    @ConfigurationProperties(prefix = "myapp")
    public class MyConfig {private String name;// getter/setter
    }
    

3. Bean 操作工具

  • ApplicationContextAware
    获取 Spring 上下文,动态获取 Bean。
    示例:

    @Component
    public class MyBean implements ApplicationContextAware {private ApplicationContext context;@Overridepublic void setApplicationContext(ApplicationContext context) {this.context = context;}public Object getBean(String name) {return context.getBean(name);}
    }
    
  • BeanUtils
    复制 Bean 属性、实例化对象等。
    示例:

    MyBean dest = new MyBean();
    BeanUtils.copyProperties(source, dest); // 同名属性复制
    
  • ObjectProvider
    延迟注入 Bean,避免依赖不存在时的异常。
    示例:

    @Autowired
    private ObjectProvider<MyService> myServiceProvider;
    MyService service = myServiceProvider.getIfAvailable();
    

4. 资源处理工具

  • ResourceUtils
    获取类路径、文件系统中的资源。
    示例:

    File file = ResourceUtils.getFile("classpath:config/file.txt");
    
  • FileCopyUtils
    简化文件复制和内容读写。
    示例:

    byte[] data = FileCopyUtils.copyToByteArray(new FileInputStream("test.txt"));
    

5. 断言与校验工具

  • Assert
    快速校验参数合法性,抛出 IllegalArgumentExceptionIllegalStateException
    示例:

    Assert.notNull(obj, "对象不能为空");
    Assert.hasText(str, "字符串必须非空");
    
  • ValidationUtils
    结合 Spring Validator 进行数据校验。
    示例:

    ValidationUtils.rejectIfEmpty(errors, "name", "name.empty");
    

6. 集合与对象工具

  • CollectionUtils
    集合判空、合并、过滤等操作。
    示例:

    if (CollectionUtils.isEmpty(list)) { ... }
    
  • ObjectUtils
    对象判空、默认值处理。
    示例:

    String value = ObjectUtils.defaultIfNull(str, "default");
    

7. SpEL 表达式工具

  • SpelExpressionParser
    解析 SpEL 表达式,动态求值。
    示例:
    ExpressionParser parser = new SpelExpressionParser();
    Expression exp = parser.parseExpression("'Hello ' + name");
    String result = exp.getValue(context, String.class);
    

8. AOP 工具

  • AopUtils
    判断代理类型、获取目标类等。
    示例:
    if (AopUtils.isAopProxy(bean)) { ... }
    

9. 事件与监听

  • ApplicationEventPublisher
    发布自定义事件。
    示例:
    @Autowired
    private ApplicationEventPublisher publisher;
    publisher.publishEvent(new MyEvent("事件内容"));
    

10. Web 相关工具

  • ResponseEntity
    封装 HTTP 响应,包括状态码、头信息、响应体。
    示例:

    return ResponseEntity.status(HttpStatus.OK).body("Success");
    
  • ServletUtils
    处理请求与响应(如获取请求参数)。
    示例:

    HttpServletRequest request = ServletUtils.getRequest();
    

11. 测试工具

  • TestPropertySource
    为测试类指定配置文件。
    示例:

    @TestPropertySource(locations = "classpath:test.properties")
    
  • MockMvc
    模拟 HTTP 请求,测试 Controller 层。
    示例:

    mockMvc.perform(get("/api/data")).andExpect(status().isOk());
    

12. 其他工具

  • StringUtils
    字符串判空、截断、分割等(org.springframework.util 包)。
    示例:

    if (StringUtils.hasText(str)) { ... }
    
  • JsonUtils
    (需配合 Jackson)JSON 序列化与反序列化。
    示例:

    String json = JsonUtils.toJson(obj);
    MyObject obj = JsonUtils.fromJson(json, MyObject.class);
    
http://www.xdnf.cn/news/8203.html

相关文章:

  • NumPy 2.x 完全指南【十八】数组元素的新增和删除
  • 数据结构与算法-算法复杂度
  • vue页面目录菜单有些属性是根据缓存读取的。如果缓存更新了。希望这个菜单也跟着更新。
  • 编程速递-RAD Studio 12.3 Athens五月补丁:May Patch Available
  • 制作一款打飞机游戏54:子弹编辑UI
  • 视频文件损坏怎么修复?4款专业视频修复工具推荐
  • JUC入门(六)
  • webpack性能优化
  • 【Pandas】pandas DataFrame round
  • 深入解读Qwen3技术报告(三):深入剖析Qwen3模型架构
  • 【网络篇】TCP协议的三次握手和四次挥手
  • 动手学深度学习12.5. 多GPU训练-笔记练习(PyTorch)
  • cider指标
  • 光谱相机在地质勘测中的应用
  • leetcode2261. 含最多 K 个可整除元素的子数组-medium
  • JAVA动态生成类
  • 在政务中使用仙盟创梦工具维护曲靖市麒麟公安分局————仙盟创梦IDE
  • WordPress AI插件 新增支持一键批量自动生成WooCommerce 产品描述、产品图、产品评论
  • 开源无界 智联欧陆——仓颉计划携手OpenHarmony共绘万物互联新图景
  • Excel 密码忘记了?巧用PassFab for Excel 解密帮您找回数据!
  • AI 多 Agent 图形化开发深度解析:iVX IDE 与主流产品技术架构对比研究
  • Python项目文件组织与PyCharm实践:打造高效开发环境
  • [AI] 提升Dify工作流性能的技巧:合理安排LLM节点的位置
  • FFmpeg 超级详细安装与配置教程(Windows 系统)
  • NIFI的处理器:RouteOnContent 1.28.1
  • Matlab学习合集
  • Kubernetes上的爬虫排队术——任务调度与弹性扩缩容实战
  • Spring 面试要点深度解析
  • ABP VNext + Elasticsearch 实战:微服务中的深度搜索与数据分析
  • 系统研发进阶:如何构建系统化的技术管理知识体系