【优雅代码】07-spring下的优秀工具类

欢迎关注b站账号/公众号【六边形战士夏宁】,一个要把各项指标拉满的男人。该文章已在github目录收录。

屏幕前的大帅比大漂亮如果有帮助到你的话请顺手点个赞、加个收藏这对我真的很重要。别下次一定了,都不关注上哪下次一定。

1.反射相关(重要)

1.1背景

ReflectionUtils和AnnotationUtils,各种姿势进行反射,最关键是不用抛异常出去,相当舒心

1.2使用

@Nullable
private static void reflectionExample() {
// 各种反射姿势,可以躲过代码检查
Method reflectionExample = ReflectionUtils.findMethod(SpringExample.class, "reflectionExample");
System.out.println(reflectionExample);
Field testName = ReflectionUtils.findField(SpringExample.class, "testName");
ReflectionUtils.makeAccessible(testName);
System.out.println(testName);
Nullable annotation = AnnotationUtils.findAnnotation(reflectionExample, Nullable.class);
System.out.println(annotation);
}

2.cglib相关(重要)

2.1背景

cglib作为直接生成字节码,速度上不言而喻,而作为spring引入不用额外引入再次加分,以下介绍个人觉得用起来非常舒服的姿势(代理模式不介绍,直接用springAop即可)

2.2使用

/private static void cglibExample() {
// 注意cglib是对字节码操作,代理模式就不在这里介绍了,spring aop非常好用了,不过这个是spring带的cglib实际上不是spring的东西 // 创建不可变bean,简直太好用了,避免缓存被别人瞎改
SpringExample bean = new SpringExample();
bean.setTestName("hello");
SpringExample immutableBean = (SpringExample) ImmutableBean.create(bean);
// 下面这步会直接报错
// immutableBean.setTestName("123"); // 对象复制,目前最快的复制,第一个source,第二个target,如果要复制list需要自行循环
BeanCopier copier = BeanCopier.create(SpringExample.class, SpringExample.class, false);
SpringExample sourceBean = new SpringExample();
SpringExample targetBean = new SpringExample();
sourceBean.setTestName("123");
targetBean.setTestName("223");
copier.copy(sourceBean, targetBean, null);
System.out.println(targetBean);
// 注意第一步可以static缓存起来,BulkBean虽然可以处理复杂逻辑,但是个人认为复杂逻辑就老实写代码实现,用这个反而累赘 // 对象转map,可以重新封装,也可以直接用
Map<String, Object> map = new HashMap<>();
map.putAll(BeanMap.create(targetBean));
Map<String, Object> beanMap = BeanMap.create(targetBean);
System.out.println(map);
System.out.println(beanMap); // map转对象
SpringExample springExampleFinal = new SpringExample();
BeanMap.create(springExampleFinal).putAll(map);
System.out.println(springExampleFinal);
}

3.spring相关(重要)

3.1背景

列了4个比较好用的工具类,request非常棒,扩展的话可以在任意位置获取到用户,StopWatch在流程繁杂的方法中可以直观输出速度消耗的百分比,花板子,但是我很喜欢

3.2使用

private static void springExample() {
// 获取request
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 获取cookie
Cookie cookie = WebUtils.getCookie(request, "hello");
// 转义url
UriUtils.decode("", StandardCharsets.UTF_8);
UriUtils.encode("", StandardCharsets.UTF_8);
// 记录时间戳
StopWatch sw = new StopWatch("startTest");
sw.start("step 1");
sw.stop();
sw.start("step 2");
sw.stop();
System.out.println(sw.prettyPrint());
}

4.bean相关(重要)

4.1背景

列了3个使用姿势,应该是使用频率最高的3个

4.2使用

private void beanExample(){
// 获取bean
SpringExample bean = ac.getBean(SpringExample.class);
// 根据继承或实现获取bean
Map<String, SpringExample> beansOfType = ac.getBeansOfType(SpringExample.class);
// 获取当前代理对象,service层常用
AopContext.currentProxy();
}

5.assert相关

5.1背景

断言工具,可以直接抛异常,不用写trycatch,节省代码

5.2使用

private static void assertExample() {
Assert.notEmpty(new ArrayList<>());
}

6.其它

6.1背景

其它spring中的东西,基本都是下位替代,没其它姿势的时候可以勉强用一下

6.2使用

private void otherExample(){
// 其下有各种转义,用处有限
System.out.println(StringEscapeUtils.class);
// 资源加载工具类,但是不如springBoot注解好用
System.out.println(ResourceUtils.class);
// 读取properties,马马虎虎的东西,java自带的也不差
System.out.println(LocalizedResourceHelper.class);
// apache的IO包可太好用了,以及很多其它和apache重复的就不介绍了
System.out.println(FileCopyUtils.class);
}

【优雅代码】07-spring下的优秀工具类的更多相关文章

  1. Spring统一返回Json工具类,带分页信息

    前言: 项目做前后端分离时,我们会经常提供Json数据给前端,如果有一个统一的Json格式返回工具类,那么将大大提高开发效率和减低沟通成本. 此Json响应工具类,支持带分页信息,支持泛型,支持Htt ...

  2. 获取Spring容器Bean对象工具类

    在开发中,总是能碰到用注解注入不了Spring容器里面bean对象的问题.为了解决这个问题,我们需要一个工具类来直接获取Spring容器中的bean.因此就写了这个工具类,在此记录一下,方便后续查阅. ...

  3. Java语言Lang包下常用的工具类介绍_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都 ...

  4. Spring 的优秀工具类盘点

    文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...

  5. Spring 的优秀工具类盘点第 2 部分

    特殊字符转义 由于 Web 应用程序需要联合使用到多种语言,每种语言都包含一些特殊的字符,对于动态语言或标签式的语言而言,如果需要动态构造语言的内容时,一个我们经常会碰到的问题就是特殊字符转义的问题. ...

  6. Spring 的优秀工具类盘点第 1 部分

    文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...

  7. Spring 的优秀工具类盘点---转

    第 1 部分: 文件资源操作和 Web 相关工具类 http://www.ibm.com/developerworks/cn/java/j-lo-spring-utils1/ 文件资源操作 文件资源的 ...

  8. Spring 常用的一些工具类

    学习Java的人,或者开发很多项目,都需要使用到Spring 这个框架,这个框架对于java程序员来说.学好spring 就不怕找不到工作.我们时常会写一些工具类,但是有些时候 我们不清楚,我们些的工 ...

  9. 获取spring上下文的bean 工具类

    有些场景我们不属于controller,service,dao,但是我们需要从spring中得到spring容器里面的bean.这时候我们需要一个类继承 ApplicationContextAware ...

随机推荐

  1. oracle 以SYSDBA远程连接数据库

    在服务器用sysdba登陆 grant sysdba to system 然后在远程就可以sysdba登陆数据库了

  2. Spring Boot简单操作

    目录 一.自定义异常页面 二.单元测试 ​三.多环境选择 四.读取主配置文件中的属性 五.读取List属性 一.自定义异常页面 对于404.405.500等异常状态,服务器会给出默认的异常页面,而这些 ...

  3. 3、Spring的DI依赖注入

    一.DI介绍 1.DI介绍 依赖注入,应用程序运行依赖的资源由Spring为其提供,资源进入应用程序的方式称为注入. Spring容器管理容器中Bean之间的依赖关系,Spring使用一种被称为&qu ...

  4. CPU中的上下文

    目录 一.简介 二.进程切换 三.线程切换 四.中断切换 五.中断检测和查看 六.模拟 一.简介 Linux是多任务操作系统,cpu划分固定时间片,分给每个进程,当前进程时间片执行完毕,将挂起,运行下 ...

  5. shell脚本 Linux系统巡检

    一.简介 源码地址 日期:2018/4/12 介绍:非常详细的Linux系统巡检脚本,截图为一部分输出 效果图: 二.使用 适用:centos6+ 语言:中文 注意:无 下载 wget https:/ ...

  6. xmake v2.6.2 发布,新增 Linux 内核驱动模块构建支持

    Xmake 是一个基于 Lua 的轻量级跨平台构建工具. 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时. 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLis ...

  7. CF615A Bulbs 题解

    Content 有 \(n\) 个灯,一开始它们都是关着的.有 \(m\) 个按钮,每个按钮可以开 \(k\) 盏灯.求能否通过这 \(m\) 个按钮使得所有灯全部都开着. 数据范围:\(1\leqs ...

  8. 开启ipv6支持

    CentOS6 开启ipv6模块操作在/etc/sysconfig/modules  目录下创建一个脚本,比如叫做 ipv6.modules,脚本中内容如下:#!/bin/shif [ ! -c /p ...

  9. python获取命令行传参的两种种常用方法argparse解析getopt 模块解析

    方法一:argparse解析 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # @Time: 2020/5/20 10:38 # @Author:zhan ...

  10. Data truncation: Truncated incorrect DOUBLE value错误的解决方案

    Data truncation: Truncated incorrect DOUBLE value错误的解决方案: 当在修改某条单位记录时,发生了Data truncation: Truncated ...