干货分享:Spring中经常使用的工具类(提示开发效率)

news2024/11/19 10:30:30

环境:Spring5.3…30

1、资源工具类

ResourceUtils将资源位置解析为文件系统中的文件的实用方法。

读取classpath下文件

File file = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX + "logback.xml") ;
// ...

读取文件系统文件

file = ResourceUtils.getFile(ResourceUtils.FILE_URL_PREFIX + "D:\\pom.xml") ;

支持以下前缀的文件

public static final String CLASSPATH_URL_PREFIX = "classpath:";
public static final String FILE_URL_PREFIX = "file:";
public static final String JAR_URL_PREFIX = "jar:";
public static final String WAR_URL_PREFIX = "war:";

2、对象工具类

对象转数组

Object obj = new int[] {1, 2, 3, 4} ;
Object[] arr = ObjectUtils.toObjectArray(obj) ;

数组添加新元素

Integer[] obj = new Integer[] {1, 2, 3, 4} ;
Integer[] ret = ObjectUtils.addObjectToArray(obj, 5) ;

判断元素是否存在

Integer[] obj = new Integer[] {1, 2, 3, 4} ;
ObjectUtils.containsElement(ret, 5)

3、数组转换

转换到指定类型

Number n = 10D ;
NumberUtils.convertNumberToTargetClass(n, Double.class) ;

解析数字

Long ret = NumberUtils.parseNumber("10", Long.class) ;
System.out.println(ret) ;

4、Stream流操作

文件流复制到内存中

FileInputStream fis = new FileInputStream(new File("d:\\1.txt")) ;
ByteArrayOutputStream baos = new ByteArrayOutputStream() ;
// 文件内容读取到了baos中
StreamUtils.copy(fis, baos) ;

文本内容读取到内存中

StreamUtils.copy("abcdef", Charset.forName("UTF-8"), baos) ;

文件流直接转换为String

FileInputStream fis = new FileInputStream(new File("d:\\1.txt")) ;
String content = StreamUtils.copyToString(fis, Charset.forName("UTF-8")) ;

5、系统属性分析

解析系统属性占位符

String home = SystemPropertyUtils.resolvePlaceholders("${java.home}") ;
System.out.println(home) ;

6、集合工具类

在这里插入图片描述

7、AOP代理工具

在这里插入图片描述
判断是否为代理对象

static class UserService {}
public static void main(String[] args) {
  ProxyFactory factory = new ProxyFactory() ;
  factory.addAdvice(new MethodInterceptor() {
    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
      return invocation.proceed() ;
    }
  });
  factory.setTarget(new UserService()) ;
  Object proxy = factory.getProxy() ;
  System.out.println(AopUtils.isAopProxy(proxy)) ;
}

判断切入点能否应用到目标类上(一般底层开发应用)

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
static @interface Pack{}
static class UserService {
  @Pack
  public void save() {}
}
// 自定义切入点
Pointcut pc = new Pointcut() {
  @Override
  public MethodMatcher getMethodMatcher() {
    // 方法匹配;方法上是否有Pack注解
    return new AnnotationMethodMatcher(Pack.class) ;
  }
  @Override
  public ClassFilter getClassFilter() {
    // 任意类
    return ClassFilter.TRUE ;
  }
};
boolean ret = AopUtils.canApply(pc, UserService.class) ;
System.out.println(ret) ;

获取代理类的原始对象

Object proxy = factory.getProxy() ;
AopProxyUtils.getSingletonTarget(proxy) ;

8、BeanFactory工具

在bean工厂上操作的方便方法,特别是在ListableBeanFactory接口上。
在这里插入图片描述
通过上面的方法可以获取指定BeanFactory中的bean或者包括在父工厂中的。

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.pack") ;
BeanFactoryUtils.beanOfTypeIncludingAncestors(context, UserDAO.class)

9、注解工具

用于在AnnotatedElements(如:Method,Field,Class等)上查找注释、元注释和可重复注释的通用实用方法。AnnotatedElementUtils类提供了丰富的方法。

// 是否存在注解
AnnotatedElementUtils.hasAnnotation(UserService.class, Pack.class) ;

10.、Bean工具

BeanUtils类提供了,实例化bean、检查bean属性类型、复制bean属性等功能。
在这里插入图片描述


// 实例化对象
Person person = BeanUtils.instantiateClass(Person.class) ;
Person target = new Person() ;
// 属性copy
BeanUtils.copyProperties(person, target);
// 查找方法
BeanUtils.findMethod(Person.class, "getName") ;
// 根据方法名获取对应的属性
PropertyDescriptor pd = BeanUtils.findPropertyForMethod(Person.class.getDeclaredMethod("getName")) ;
System.out.println(pd.getName()) ;

11、数据验证

参数验证,在SpringMVC中都通过注解的方式。除了注解你也可以通过ValidationUtils工具类使用自定义的验证器进行参数的验证:

static class Person {
  private Integer age ;
    private String name ;
}
// 自定义验证器
static class PersonValidator implements Validator {
  @Override
  public boolean supports(Class<?> clazz) {
    return Person.class.isAssignableFrom(clazz) ;
  }
  @Override
  public void validate(Object target, Errors errors) {
    Person person = (Person) target ;
    if (person.age == null) {
      errors.reject("age.empty", "年龄不能为空") ;
    }
  } 
}
public static void main(String[] args) {
  Validator validator = new PersonValidator() ;
  Person target = new Person() ;
  BeanPropertyBindingResult errors = new BeanPropertyBindingResult(target, "person") ;
  ValidationUtils.invokeValidator(validator, target, errors) ;
  // 错误结果信息
  System.out.println(errors) ;
}

12.、XML解析

在这里插入图片描述

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance() ;
DocumentBuilder builder = factory.newDocumentBuilder() ;
Document document = builder.parse(new ClassPathResource("com/pack/main/utils/person.xml").getInputStream()) ;
Element element = document.getDocumentElement() ;
List<Element> elements = DomUtils.getChildElements(element) ;
elements.forEach(elt -> {
  System.out.println(elt.getTagName() + "=" + elt.getFirstChild().getNodeValue()) ;
}) ;

13、HTML转换

在这里插入图片描述

String ret = HtmlUtils.htmlEscape("<script>alert('脚本')</script>") ;
System.out.println(ret) ;
// 输出
&lt;script&gt;alert(&#39;脚本&#39;)&lt;/script&gt;

14、Web相关

在这里插入图片描述
来源:Spring全家桶实战案例源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1882154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

淘系-万相台无界实操运营课:淘系 付费工具课(40节课)

课程目录 01_万相台无界系统性忖费推广思维.mp4 02_万相台无界七大推广场景详解.mp4 03关键词推广计划之标准计划搭建技巧.mp4 04_关键词推广之智能计划推广技巧.mp4 05_关键词推广之趋势选品计划推广技巧.mp4 06关键词推广之智能选品计划推广技巧.mp4 07_非标品的关键词…

做好准备了吗?智能手机又一轮涨价潮来了……

还记得十一二年前&#xff0c;智能手机刚大力普及的时候&#xff0c;以小米、魅族为首的新势力品牌&#xff0c;快速打破三星、苹果及HTC们的高价门槛&#xff0c;将旗舰产品的价格快速压到了两千价位。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍ 一时间&#xff0c;手机市场快速完成了…

鸿蒙:路由Router原理

页面路由&#xff1a;在应用程序中实现不同页面之间的跳转和数据传递 典型应用&#xff1a;商品信息返回、订单等多页面跳转 页面栈最大容量为32个页面&#xff0c;当页面需要销毁可以使用router.clear()方法清空页面栈 router有两种页面跳转模式&#xff1a; router.pushUrl…

压缩算法LZ4

LZ4简介 LZ4 是无损压缩算法&#xff0c;提供每个核 大于 500 MB/s 的压缩速度&#xff0c;可通过多核 CPU 进行扩展。LZ4算法解压速度极快&#xff0c;单核解压速度达到GB/s&#xff0c;通常达到多核系统的 RAM 速度限制。 压缩速度可以动态调整&#xff0c;选择一个“加速”…

VLOOKUP函数在表格的简单运用-两个表匹配

1.什么是VLOOKUP&#xff1f; VLOOKUP是Excel中的一个内置函数&#xff0c;主要用于在区域或表格的首列查找指定的值&#xff0c;并返回该行中其他列的值。它特别适用于跨表格数据匹配 2.函数运用 2.1.这边两个表取名a表和b表&#xff0c;做为我们的实例表。 表格a包含&…

windows环境下创建python虚拟环境

windows环境下创建python虚拟环境 使用virtualenv库创建虚拟环境&#xff0c;可使不同的项目处于不同的环境中 安装方法&#xff1a; pip install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple pip install virtualenvwrapper-win -i https://pypi.tuna.tsinghua…

git 还原被删除的分支

在多人项目开发中&#xff0c;有一次碰到忘记合并到master分支了&#xff0c;直接就把开发分支给删除了&#xff0c;现在记录下怎么还原被删除的分支 必须保证删除的分支之前已经被推送到了远程仓库 # 找出被删除分支的最后一个提交的哈希值 git reflog show# 找到提交哈希值…

【数据结构】(C语言):队列

队列&#xff1a; 线性的集合。先进先出&#xff08;FIFO&#xff0c;first in first out&#xff09;。两个指针&#xff1a;头指针&#xff08;指向第一个进入且第一个出去的元素&#xff09;&#xff0c;尾指针&#xff08;指向最后一个进入且最后一个出去的元素&#xff0…

虚拟机启动失败 请进行修复 关闭hyper-v

场景 win11开启夜神模拟器时弹出此提示。点击关闭hyper-v并重启电脑后仍然不行。 解决方法 关闭 Windows安全中心 的 内存完整性 后重启电脑恢复正常。 补充 由于我这里除了会用到夜神模拟器&#xff0c;还会用到docker&#xff0c;而docker又依赖hyper-v&#xff0c;不…

PHP基础教程——总结W3school

1、<?php ?> 2、$ 声明变量 3、变量大小写敏感 关键字&#xff08;if、else、echo&#xff09;和用户定义的类、函数大小写不敏感 4、三种注释 // # /* */ 5、echo "<br>"; 换行 6、global(关键字) 函数内访问全局变量 $GLOBALS[index] …

三坐标测量机的“柔性”特点及其在工业中的应用

现代制造业中&#xff0c;三坐标测量机&#xff08;CMM&#xff09;在产品开发、质量控制和生产过程中发挥着重要作用。它通过高精度准确测量工件的几何尺寸和形状&#xff0c;来保证产品质量符合严格的技术规范。CMM高精度和高效率的特点使其成为自动化生产线和质量控制流程中…

统一的可观察性和安全性如何增强你的业务?

作者&#xff1a;来自 Elastic Michael Calizo 利用人工智能、异常检测和增强攻击发现功能&#xff0c;在一个平台上增强组织的可观察性和安全性能力 当今数字环境中的组织越来越关注服务可用性&#xff0c;并保护其软件免受恶意篡改和攻击。传统的安全和可观察性工具通常以孤…

SpringMVC的架构有什么优势?——控制器(一)

文章目录 控制器(Controller)1. 控制器(Controller)&#xff1a;2. 请求映射(Request Mapping)&#xff1a;3. 参数绑定(Request Parameters Binding)&#xff1a;4. 视图解析器(View Resolver)&#xff1a;5. 数据绑定(Data Binding)&#xff1a;6. 表单验证(Form Validation)…

阿里云物联网应用层开发:第一部分,项目简介

文章目录 1、物联网应用层简介2、阿里云物联网应用层开发例程主要内容3、需要掌握基础知识 1、物联网应用层简介 应用层是物联网系统的用户界面&#xff0c;它提供了用户与系统交互的接口&#xff0c;这一层是将网络传输层的数据结果以易于理解和使用的方式呈现给用户&#xf…

企业互联网建站源码系统 附带完整的安装代码包以及搭建部署教程

系统概述 企业互联网建站源码吸系统是一款集众多先进功能于一身的建站工具。它提供了丰富的模板和组件&#xff0c;允许企业根据自身需求和品牌形象进行个性化定制&#xff0c;快速搭建出具有独特风格的网站。 代码示例 系统特色功能一览 1.用户友好界面&#xff1a;系统采用…

传感器的静态标定

1.传感器静态标定的基本概念 传感器的静态标定指标主要有线性度、灵敏度、重复性、灵敏度等。 &#xff08;1&#xff09;线性度 线性度是描述传感器静态特性的一个重要指标&#xff0c;以被测输入量处于稳定状态为前提。在规定条件下&#xff0c;传感器校准曲线与拟合直线间…

AI音乐革命:创新的门槛降低与产业未来的挑战

文章目录 每日一句正能量前言整体介绍人机合作AI在音乐创作中的辅助作用人机共同创作的模式实现人机共同创作的可能性伦理和法律考量 伦理道德AI与人类创造力的关系技术发展与人类创造力的平衡社会和文化影响结论 后记AI与音乐的未来交响创新的双刃剑版权与伦理的探讨人机合作的…

Centos7安装Minio笔记

一、Minio概述 Minio是一款开源的对象存储服务器&#xff0c;可以运行在多种操作系统上&#xff0c;包括Linux、Windows和MacOS等。提供一种简单、可扩展、高可用的对象存储解决方案&#xff0c;支持多种数据格式&#xff0c;包括对象、块和文件等。Minio是一款强大、灵活、可…

js基础学习

1、js概述 js是javascript的简称&#xff0c;作用是实现页面和用户的交互 js由浏览器解析运行&#xff0c;不需要编译 js由es基础语法&#xff0c;bom浏览器相关&#xff0c;dom文档操作相关 三大部分组成 2、html引入js <!DOCTYPE html> <html lang"zh-CN&qu…

鸿蒙 DevEcho Studio 查看设备文件

在菜单栏单击View > Tool Windows > Device File Browser&#xff0c;打开Device File Browser。 从下拉列表中选择设备&#xff08;设备需已连接&#xff09;。 选择设备后&#xff0c;显示文件/文件夹列表&#xff0c;可进行以下操作&#xff1a; 右键单击目录…