环境: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) ;
// 输出
<script>alert('脚本')</script>
14、Web相关
来源:Spring全家桶实战案例源码