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

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

环境: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() {@Overridepublic 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 {@Packpublic void save() {}
}
// 自定义切入点
Pointcut pc = new Pointcut() {@Overridepublic MethodMatcher getMethodMatcher() {// 方法匹配;方法上是否有Pack注解return new AnnotationMethodMatcher(Pack.class) ;}@Overridepublic 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 {@Overridepublic boolean supports(Class<?> clazz) {return Person.class.isAssignableFrom(clazz) ;}@Overridepublic 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.lryc.cn/news/388184.html

相关文章:

  • 一文讲懂npm link
  • 观成科技:证券行业加密业务安全风险监测与防御技术研究
  • 使用Swoole开发高性能的Web爬虫
  • 【Elasticsearch】Elasticsearch索引创建与管理详解
  • [数据集][目标检测]棉花检测数据集VOC+YOLO格式389张1类别
  • 使用Java实现实时数据处理系统
  • 整合web-socket的常见bug
  • Python 中字符串的常用操作都有哪些?
  • FFmpeg 硬件编码加速文档介绍
  • 【Matlab函数分析】imread从图形文件读取图像
  • 零基础光速入门AI绘画,SD保姆攻略
  • 详细配置SQL Server的链接服务器(图文操作Mysql数据库)
  • DDD学习笔记五
  • CAN报文的发送类型-OnChange、OnWrite、IfActive、Repetition
  • 神经网络在机器学习中的应用:手写数字识别
  • QT拖放事件之四:自定义拖放操作-利用QDrag来拖动完成数据的传输-案例demo
  • Spring Boot应用的部署与扩展
  • Spring底层原理之bean的加载方式八 BeanDefinitionRegistryPostProcessor注解
  • 大数据面试题之Spark(5)
  • springboot笔记示例六:fastjson2集成
  • VLOOKUP函数在表格的简单运用-两个表匹配
  • http.cookiejar.LoadError: Cookies file must be Netscape formatted,not JSON.解决方案
  • 逻辑操作符
  • Java调用第三方接口的秘籍:技巧、案例与最佳实践
  • 【机器学习】机器学习重要方法——深度学习:理论、算法与实践
  • 计网之IP
  • mybatis延迟加载
  • 危险!属性拷贝工具的坑!
  • qt实现打开pdf(阅读器)功能用什么库比较合适
  • 在node.js环境中使用web服务器http-server运行html静态文件