一、日常开发使用工具类
①、JDK自带工具类,rt.jar中的工具类
②、Apache开源组织下:commons-lang3、commons-collections4
③、Spring框架自带工具类【本文介绍】
④、众多开源软件或多或少都会写一些自己的工具类在软件中,还有一些好用的如Guava、HuTool等。
【选择工具包以项目组的统一规定吧,方便软件管理、减少jar包冲突】
二、Spring框架自带工具类
①、Spring工具包位置,在Spring的core模块下。org.springframework.util
②、断言工具类:Assert
③、集合工具类:CollectionUtils
④、字符串工具类 StringUtils
⑤、反射工具类 ReflectionUtils
⑥、MD5加密工具类
⑦、类工具ClassUtils
⑧、数字处理类Base64Utils
⑨、序列化和反序列化工具类SerializationUtils
⑩、WebUtils:包路径:org.springframework.web.util
属性文件操作:org.springframework.core.io.support
PropertiesLoaderUtils 允许您直接通过基于类路径的文件地址加载属性资源
FileSystemResource 以文件系统绝对路径的方式进行访问;
ClassPathResource 以类路径的方式进行访问;
ServletContextResource 以相对于 Web 应用根目录的方式进行访问。
ResourceUtils 它支持“classpath:”和“file:”的地址前缀,它能够从指定的地址加载文件资源,常用方法:getFile();
StopWatch 一个很好的用于记录执行时间的工具类, 且可以用于任务分阶段的测试时间
HttpStatus: org.springframework.http:Http的状态码
HttpMethod:Http的方法
EncodedResource:当您使用 Resource 实现类加载文件资源时,它默认采用操作系统的编码格式。如果文件资源采用了特殊的编码格式(如 UTF-8),则在读取资源内容时必须事先通过 EncodedResource 指定编码格式,否则将会产生中文乱码的问题。
实用的持续更新,Spring框架的表命名,模块下支持的通常一support命名.
附录Spring事务失效场景
线程隔离工具类封装
不支持子线程获取父线程值的并发线程隔离工具类:ThreadLocal
支持子线程获取父线程值的并发线程隔离工具类:InheritableThreadLocal
Spring框架加了一个构造器的命名类,方便使用.
源码如下:
package org.springframework.core;
import org.springframework.util.Assert;
/**
* {@link ThreadLocal} subclass that exposes a specified name
* as {@link #toString()} result (allowing for introspection).
*
* @author Juergen Hoeller
* @since 2.5.2
* @param <T> the value type
* @see NamedInheritableThreadLocal
*/
public class NamedThreadLocal<T> extends ThreadLocal<T> {
private final String name;
/**
* Create a new NamedThreadLocal with the given name.
* @param name a descriptive name for this ThreadLocal
*/
public NamedThreadLocal(String name) {
Assert.hasText(name, "Name must not be empty");
this.name = name;
}
@Override
public String toString() {
return this.name;
}
}
Tips:扩展开源类,继承+设置自定义属性.
SpringBean的生命周期
一个bean的生命周期的主要阶段如下:
实例化(Instantiation)
填充属性(Populate Properties)
BeanNameAware设置(BeanNameAware set)
BeanFactoryAware设置(BeanFactoryAware set)
前置初始化(Post Process Before Initialization)
初始化(Initialization)
后置初始化(Post Process After Initialization)
销毁(Destroy)
@PostConstruct 的使用和特点:
- 只有一个非静态方法能使用此注解;
- 被注解的方法不得有任何参数;
- 被注解的方法返回值必须为void;
- 被注解方法不得抛出已检查异常;
- 此方法只会被执行一次;