spring中常用工具类介绍

Spring 框架中的常用工具类及其应用 Spring 提供了许多实用的工具类,涵盖了字符串操作、集合操作、对象操作、反射操作、Bean 操作、资源处理、路径匹配、性能测量、邮件发送和 JSON 操作等方面。以下是一些常用的工具类及其功能概述。通过本文的介绍,我们了解了 Spring 框架中一些常用的工具类及其应用场景。合理使用这些工具类可以显著提高开发效率和代码质量。希望这些信息对你有所帮助! 阅读详情

spring中常用工具类介绍

文件资源操作
Spring 定义了一个 org.springframework.core.io.Resource 接口,Resource 接口是为了统一各种类型不同的资源而定义的,Spring 提供了若干 Resource 接口的实现类,这些实现类可以轻松地加载不同类型的底层资源,并提供了获取文件名、URL 地址以及资源内容的操作方法

访问文件资源
* 通过 FileSystemResource 以文件系统绝对路径的方式进行访问;
* 通过 ClassPathResource 以类路径的方式进行访问;
* 通过 ServletContextResource 以相对于 Web 应用根目录的方式进行访问。 
package com.baobaotao.io; 
import java.io.IOException; 
import java.io.InputStream; 
import org.springframework.core.io.ClassPathResource; 
import org.springframework.core.io.FileSystemResource; 
import org.springframework.core.io.Resource; 
public class FileSourceExample { 
public static void main(String[] args) { 
try { 
String filePath = 
"D:/masterSpring/chapter23/webapp/WEB-INF/classes/conf/file1.txt"; 
// ① 使用系统文件路径方式加载文件
Resource res1 = new FileSystemResource(filePath); 
// ② 使用类路径方式加载文件
Resource res2 = new ClassPathResource("conf/file1.txt"); 
InputStream ins1 = res1.getInputStream(); 
InputStream ins2 = res2.getInputStream(); 
System.out.println("res1:"+res1.getFilename()); 
System.out.println("res2:"+res2.getFilename()); 
} catch (IOException e) { 
e.printStackTrace(); 
} 
} 
} 
在获取资源后,您就可以通过 Resource 接口定义的多个方法访问文件的数据和其它的信息
getFileName() 获取文件名,
getFile() 获取资源对应的 File 对象,
getInputStream() 直接获取文件的输入流。
createRelative(String relativePath) 在资源相对地址上创建新的资源。

在 Web 应用中,您还可以通过 ServletContextResource 以相对于 Web 应用根目录的方式访问文件资源
Spring 提供了一个 ResourceUtils 工具类,它支持“classpath:”和“file:”的地址前缀 ,它能够从指定的地址加载文件资源。
File clsFile = ResourceUtils.getFile("classpath:conf/file1.txt"); 
System.out.println(clsFile.isFile()); 
String httpFilePath = "file:D:/masterSpring/chapter23/src/conf/file1.txt"; 
File httpFile = ResourceUtils.getFile(httpFilePath); 

文件操作
在使用各种 Resource 接口的实现类加载文件资源后,经常需要对文件资源进行读取、拷贝、转存等不同类型的操作。


FileCopyUtils
它提供了许多一步式的静态操作方法,能够将文件内容拷贝到一个目标 byte[]、String 甚至一个输出流或输出文件中。
package com.baobaotao.io; 
import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileReader; 
import java.io.OutputStream; 
import org.springframework.core.io.ClassPathResource; 
import org.springframework.core.io.Resource; 
import org.springframework.util.FileCopyUtils; 
public class FileCopyUtilsExample { 
public static void main(String[] args) throws Throwable { 
Resource res = new ClassPathResource("conf/file1.txt"); 
// ① 将文件内容拷贝到一个 byte[] 中
byte[] fileData = FileCopyUtils.copyToByteArray(res.getFile()); 
// ② 将文件内容拷贝到一个 String 中
String fileStr = FileCopyUtils.copyToString(new FileReader(res.getFile())); 
// ③ 将文件内容拷贝到另一个目标文件
FileCopyUtils.copy(res.getFile(), 
new File(res.getFile().getParent()+ "/file2.txt")); 
// ④ 将文件内容拷贝到一个输出流中
OutputStream os = new ByteArrayOutputStream(); 
FileCopyUtils.copy(res.getInputStream(), os); 
} 
} 
static void copy(byte[] in, File out) 将 byte[] 拷贝到一个文件中
static void copy(byte[] in, OutputStream out) 将 byte[] 拷贝到一个输出流中
static int copy(File in, File out) 将文件拷贝到另一个文件中
static int copy(InputStream in, OutputStream out) 将输入流拷贝到输出流中
static int copy(Reader in, Writer out) 将 Reader 读取的内容拷贝到 Writer 指向目标输出中
static void copy(String in, Writer out) 将字符串拷贝到一个 Writer 指向的目标中

属性文件操作
Spring 提供的 PropertiesLoaderUtils 允许您直接通过基于类路径的文件 地址加载属性资源
package com.baobaotao.io; 
import java.util.Properties; 
import org.springframework.core.io.support.PropertiesLoaderUtils; 
public class PropertiesLoaderUtilsExample { 
public static void main(String[] args) throws Throwable { 
// ① jdbc.properties 是位于类路径下的文件 
Properties props = PropertiesLoaderUtils.loadAllProperties("jdbc.properties"); 
System.out.println(props.getProperty("jdbc.driverClassName")); 
} 
} 

特殊编码的资源
当您使用 Resource 实现类加载文件资源时,它默认采用操作系统的编码格式。如果文件资源采用了特殊的编码格式(如 UTF-8),则在读取资源内容时必须事先通过 EncodedResource 指定编码格式,否则将会产生中文乱码的问题。
package com.baobaotao.io; 
import org.springframework.core.io.ClassPathResource; 
import org.springframework.core.io.Resource; 
import org.springframework.core.io.support.EncodedResource; 
import org.springframework.util.FileCopyUtils; 
public class EncodedResourceExample { 
public static void main(String[] args) throws Throwable { 
Resource res = new ClassPathResource("conf/file1.txt"); 
// ① 指定文件资源对应的编码格式(UTF-8)
EncodedResource encRes = new EncodedResource(res,"UTF-8"); 
// ② 这样才能正确读取文件的内容,而不会出现乱码
String content = FileCopyUtils.copyToString(encRes.getReader()); 
System.out.println(content); 
} 
} 


访问 Spring 容器,获取容器中的 Bean,使用 WebApplicationContextUtils 工具类 
ServletContext servletContext = request.getSession().getServletContext();
WebApplicationContext wac = WebApplicationContextUtils. getWebApplicationContext(servletContext); 


Spring 所提供的过滤器和监听器

延迟加载过滤器
Hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层,当 Web 层访问到那些需要延迟加载的数据时,由于加载领域对象的 Hibernate Session 已经关闭,这些导致延迟加载数据的访问异常。
Spring 为此专门提供了一个 OpenSessionInViewFilter 过滤器,它的主要功能是使每个请求过程绑定一个 Hibernate Session,即使最初的事务已经完成了,也可以在 Web 层进行延迟加载的操作。
<filter> 
<filter-name>hibernateFilter</filter-name> 
<filter-class> 
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 
</filter-class> 
</filter> 
<filter-mapping> 
<filter-name>hibernateFilter</filter-name> 
<url-pattern>*.html</url-pattern> 
</filter-mapping> 

中文乱码过滤器
<filter> 
<filter-name>encodingFilter</filter-name> 
<filter-class> 
org.springframework.web.filter.CharacterEncodingFilter ① Spring 编辑过滤器
</filter-class> 
<init-param> ② 编码方式
<param-name>encoding</param-name> 
<param-value>UTF-8</param-value> 
</init-param> 
<init-param> ③ 强制进行编码转换
<param-name>forceEncoding</param-name> 
<param-value>true</param-value> 
</init-param> 
</filter> 
<filter-mapping> ② 过滤器的匹配 URL 
<filter-name>encodingFilter</filter-name> 
<url-pattern>*.html</url-pattern> 
</filter-mapping> 


一般情况下,您必须将 Log4J 日志配置文件以 log4j.properties 为文件名并保存在类路径下。Log4jConfigListener 允许您通过 log4jConfigLocation Servlet 上下文参数显式指定 Log4J 配置文件的地址,如下所示:
① 指定 Log4J 配置文件的地址
<context-param> 
<param-name>log4jConfigLocation</param-name> 
<param-value>/WEB-INF/log4j.properties</param-value> 
</context-param> 
② 使用该监听器初始化 Log4J 日志引擎
<listener> 
<listener-class> 
org.springframework.web.util.Log4jConfigListener 
</listener-class> 
</listener> 


Introspector 缓存清除监听器,防止内存泄露
<listener> 
<listener-class> 
org.springframework.web.util.IntrospectorCleanupListener 
</listener-class> 
</listener> 


一些 Web 应用服务器(如 Tomcat)不会为不同的 Web 应用使用独立的系统参数,也就是说,应用服务器上所有的 Web 应用都共享同一个系统参数对象。这时,您必须通过 webAppRootKey 上下文参数为不同 Web 应用指定不同的属性名:如第一个 Web 应用使用 webapp1.root 而第二个 Web 应用使用 webapp2.root 等,这样才不会发生后者覆盖前者的问题。此外,WebAppRootListener 和 Log4jConfigListener 都只能应用在 Web 应用部署后 WAR 文件会解包的 Web 应用服务器上。一些 Web 应用服务器不会将 Web 应用的 WAR 文件解包,整个 Web 应用以一个 WAR 包的方式存在(如 Weblogic),此时因为无法指定对应文件系统的 Web 应用根目录,使用这两个监听器将会发生问题。

 

特殊字符转义
Web 开发者最常面对需要转义的特殊字符类型:
* HTML 特殊字符;
* JavaScript 特殊字符;

 

HTML 特殊字符转义
* & :&amp;
* " :&quot;
* < :&lt;
* > :&gt;

 

JavaScript 特殊字符转义
* ' :/'
* " :/"
* / ://
* 走纸换页: /f
* 换行:/n
* 换栏符:/t
* 回车:/r
* 回退符:/b

 

工具类

JavaScriptUtils.javaScriptEscape(String str);

HtmlUtils.htmlEscape(String str);①转换为HTML转义字符表示

HtmlUtils.htmlEscapeDecimal(String str); ②转换为数据转义表示

HtmlUtils.htmlEscapeHex(String str); ③转换为十六进制数据转义表示

HtmlUtils.htmlUnescape(String str);将经过转义内容还原

 

Spring框架下自带了丰富的工具类,在我们开发时可以简化很多工作:
1.Resource访问文件资源:
具体有:ResourceUtils.getFile(url);
FileSystemResource(); ClassPathResource();
ServletContextResource(application,url);


2.文件操作 FileCopyUtils
具体有:FileCopyUtils.copy(Resource.getFile,new File(Resource.getFile(),getParent()+'目标文件名'));


3.属性文件操作 PropertiesLoaderUtils 
具体有: PropertiesLoaderUtils.loadAllProperties("属性文件名"); --基于类路径


4.EncodedResource(Resource对象,"UTF-8") 编码资源(特殊的);


5.WebApplicationContextUtils


6.StringEscapeutils 编码解码


akshare 布林通道策略 import datetime import pandas as pd import backtrader as bt import matplotlib.pyplot as plt from datetime import datetime import matplotlib import akshare as ak %matplotlib inline class Boll_strategy(bt.Strategy): #自定义参数,每次买入1800手 params=(('size'. 阅读详情

相关推荐

YOLOv8中的C2f模块代码详解

在YOLOv8网络结构中,C2f模块(CSP Bottleneck with 2 Convolutions)是一个关键组件,用于实现跨阶段部分聚合

zzzyyy8的博客 3万+

Spring常用工具类

文章目录一、内置工具类1、断言2、对象、数组、集合2.1 ObjectUtils2.2 StringUtils2.3 CollectionUtils3、文件、资源、IO 流3.1 FileCopyUtils3.2 ResourceUtils3.3 StreamUtils4、反射、AOP4.1 ReflectionUtils4.2 AopUtils4.3 AopContext4.4 AOP举例二、第三方工具类 一、内置工具类 内置工具类一般位于org.springframework.util下 1、断言 断

Shawn的个人博客 5297

PSINS惯性系初始对准与代码解读

本文参考“摇摆基座上基于信息的捷联惯导粗对准研究”(秦永元),以及“严恭敏博士后研究报告”,详细解读并推导了静基座惯性系对准算法,并与PSINS代码进行对照解读。

u011012050的博客 6753

别瞎写工具类了,Spring自带的不香吗?

有时候,我们需要在项目中使用反射功能,如果使用最原始的方法来开发,代码量会非常多,而且很麻烦,它需要处理一大堆异常以及访问权限等问题。很多时候,我们会在代码中定义http的返回码,比如:接口正常返回200,异常返回500,接口找不到返回404,接口不可用返回502等。在我们日常开发过程中,对字符串的操作是非常频繁的,但JDK提供的对于字符串操作的方法,过于简单,无法满足我们开发中的需求。对于后端的很多接口,经常需要去掉前后空格,我们可以使用String类的trim(),但是如果要同时去掉中间的空格呢?

weixin_JimZemlin的博客 1431

python123题目——摩尔斯电码转换

类型:列表元组。

m0_62488776的博客 4419

SAP-PP 返工订单成本归集优化:从物料结算到成本中心的配置与增强实践

本文深入探讨SAP-PP模块中返工订单成本归集的优化方案,重点解析从物料结算到成本中心的配置与增强实践。通过结算参数文件配置、分配结构调整及增强开发实战,解决返工费用误计入物料成本的问题,确保财务核算精准性。文章还提供测试验证方案与常见报错处理技巧,助力企业实现成本数据清晰流向分析。

weixin_29260291的博客 365

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

干货分享:Spring中经常使用的工具类(提示开发效率)资源工具类、对象工具类、数组转换、Stream流操作、系统属性解析、集合工具类、AOP代理工具BeanFactory工具类、注解工具类、Bean工具类、数据验证工具类、XML解析工具类、HTML转换工具类,WEB相关工具类

三两肉的博客 1609

用Python模拟随机游走:从一维到三维,直观理解马尔可夫链的常返性

本文通过Python模拟一维到三维的随机游走,直观展示马尔可夫链的常返性特性。使用NumPy和Matplotlib构建模拟器,揭示不同维度下随机游走的返回概率差异,帮助读者理解为什么一维和二维游走具有常返性,而三维游走可能永远迷失。文章包含完整的代码示例和可视化技巧,适合概率论和Python编程爱好者学习实践。

weixin_28694295的博客 400

Spring的工具类

下面是Spring中的一些常用工具类:StringUtils:提供了许多字符串操作方法,如字符串拼接、替换、截取等等。 ArrayUtils:提供了一系列有用的数组操作方法,如数组合并、查找、排序等等。 CollectionUtils:提供了一系列有用的集合操作方法,如集合合并、查找、排序等等。 BeanUtils:提供了一个实用的工具类,用于JavaBean之间的复制和属性的赋值。 ClassPathResource:提供了一个方便的方法,用于在类路径中查找资源文件。 ApplicationContext

qq_50523945的博客 470

MATLAB 图像滤波:高通、低通、带通和方向滤波器

在 MATLAB 中,我们可以使用不同类型的滤波器对图像进行处理,包括高通滤波器、低通滤波器、带通滤波器和方向滤波器。通过以上代码示例,我们介绍了 MATLAB 中使用高通滤波器、低通滤波器、带通滤波器和方向滤波器对图像进行滤波的方法。高斯滤波器可以实现带通滤波效果,通过调整滤波器的方差参数可以控制带通滤波器的频率范围。这里的平均滤波器是一种常见的低通滤波器,通过对图像周围的像素进行平均来实现平滑效果。Sobel 滤波器是一种常用的方向滤波器,用于检测图像中的水平和垂直边缘。函数将高通滤波器应用于图像。

CyberSparkZ的博客 1394

“华为杯”研究生数学建模竞赛2017年-【华为杯】B题:面向下一代光通信的 VCSEL 激光器仿真模型

得出以下主要结论:在相同的偏置电流条件下,随着温度的升高,带宽的峰值向。在相同的温度下,随着电流的增大,带宽的峰值越小且曲线由波峰形状。方案,包括可能的数学公式,不同温度和偏置电流下的带宽响应曲线,并与问题。线,得出以下主要结论:在相同的偏置电流条件下,随着温度的升高,带宽的峰。在相同的温度下,随着电流的增大,带宽的峰值越小且曲线由波峰形状逐渐变得。得的激光器特性曲线和模型中仿真得到的特性曲线,之后,可以将两组曲线的差。说明的是,由于数值优化算法的成功与否很大程度上依赖于初始参数的猜测,参。

getusushu的博客 99

Spring之工具类

Spring之工具类 日常学习开发中,项目中经常需要用到各种工具类,而Spring框架中为我们提供了一些列工具,我们可以在不引用其他包的情况下,使用这些工具也能满足常规需求。 断言工具Assert public static void testAssert() { // false将会抛出IllegalStateException异常 Assert.state(false, "状态异常"); // 自定义消息时,传递一个Supplier函数式接口 Assert.state(f

kenewstar的博客 7136

Android 13.0 开机启动优化之PMS扫描apk耗时相关功能优化

在android13.0的系统rom定制化开发中,在系统中开发产品时,会根据客户要求内置第三方app,这时如果内置app过多,或者安装的app过多,在系统开机的过程中 在pms扫描安装app的时候,就会比较耗时,这时候就需要优化下pms扫描安装app这块的功能代码,用多线程来实现pms扫描安装app,来加快开机时间,接下来 来实现这个功能

安卓兼职framework和app工程师的博客 1333

spring管理的类如何调用非spring管理的类

spring管理的类如何调用非spring管理的类.   就是使用一个spring提供的感知概念,在容器启动的时候,注入上下文即可.   下面是一个工具类. 1 import org.springframework.beans.BeansException; 2 import org.springframework.context.ApplicationContext; ...

weixin_30312659的博客 472

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Spring类

动态数据源配置需要继承 AbstractRoutingDataSource 实现 determineCurrentLookupKey 方法。@Override。

qq_42219004的博客 780

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

未被spring托管的类引用被spring托管的类

在spring的开发中,我们通常都是将类或者接口注入到spring中进行托管,这样做很明显的好处就是避免了实例化。 但是如果我们在一个没有被spring托管的类中引用一个被spring托管的类时,我们会发现使用@Resource或者@Autowired注解都是没有用的,这时候应该怎么办呢,我在最近的工作中就遇到了这个问题,可能是因为本人对spring理解不透彻的问题,所以这个问题就很困扰我,然而旁边的程序员很轻松的就帮我解决了。talk is cheap,show me your code! 代码就是这样

Waiter_s的博客 1328

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Spring 中将service 注入到普通的类中

在spring管理的web项目里,譬如Struts和spring的项目,配置好后,Struts里就可以直接使用定义好的service。但是如果要在普通的工具类里,使用service或dao,就会报空指针,因为这个普通的Java类并不在spring管理下,不能使用spring注入的service。 方法一:(亲测可用,直接在方法上注入) 方法二:(测试不可用) 最后,记得在applic...

weixin_40805079的博客 1177

spring 主要涉及类类图

把spring 相关类做了下整理,把spring主要涉及的类都整理成类图,方便查看它们之前的关系,也能帮助更好的阅读分析源码. 1. IOC容器 BeanFactory类图: 2.  资源Resource相关类图: 3. 资源加载器ResourceLoader相关类图: 4. spring Bean定义解析器相关: 5. 实

strivezxq的专栏 1万+

spring获取指定包下面的所有类

import java.io.IOException; import java.util.HashSet; import java.util.Set; import org.springframework.context.ResourceLoaderAware; import org.springframework.core.io.Resource; import org.spr...

weixin_34185364的博客 3336

关于web项目中非spring管理的类调用spring控制的类的问题

今天项目中用到了非spring管理的类调用spring管理的类,搞了将近一天都是空指针错误真不知道是怎么搞的。最终仔细分析了下我的需求是从串口中读数放入数据库但是另外几个类都是由spring接管的持久层用的ibatis而我在串口中的那个类无论如何都是调用不了这几个类。 在网上找了很多也不尽人意,最终还是回到了最原始最简单的办法。方法如下: String[] str = {"这个里面写你...

ioipuyt的专栏 408

Spring框架下类的初始化顺序

Spring框架下类的初始化顺序

hgffhh的博客 1419

Spring 常用工具类

import com.google.common.collect.Lists; import org.springframework.util.*; import java.io.Serializable; import java.lang.reflect.Method; import java.util.List; class BeanDO implements Serializable {...

gaofla的博客 110

Spring类注解的使用

首先我们得明确一点,为什么需要使用注解,这是为了更加简单的读取和存储对象.而类注解则是其中一种,本篇文章的目的就是为大家介绍怎么使用类注解和介绍类注解的基本内容.本篇文章注解介绍的是类注解有哪些以及类注解的使用.首先我们得配置好扫描路径,之后再对其使用,其次还有一个需要理解的是,五大类注解的分层.

ta_older的博客 293

Spring使用Configuration类进行配置

通过使用@Configuration标签来标记配置类,也就是说我们现在不再需要创建某个xml文件作为配置文件,而是使用某个类,并且引入@Configuration标签来进行创建配置类。2.在确定好了配置类之后,我们还需要解决如何扫描标签的这个问题,在xml文件中使用context:component-scan>标签来进行扫描,而在配置类中只需要使用@CompoentScan(classpath:标签对应的上级包的路径)。对于这样的类,我们可以在配置类中构建单独的方法,来对这个封装类进行相应构建。

Hellyc的博客 780

Spring获取所有被托管的类

 有的时候想获取被Spring托管的类,并且想对其进行修改。  步骤: 创建一个类实现ApplicationContextAware接口,加上注解@Component 。重写setApplicationContext(ApplicationContext applicationContext)方法,在此方法中可以获取ApplicationContext对象  示例: @Component public class GetTest implements ApplicationContextAware {

tanxinji的博客 584

Java中Spring框架中常用工具类的简介说明

Spring框架中常用工具类说明

qq_25073223的博客 178
上一篇: org.apache.log4j.Logger 详解
下一篇: eclipse中如何对jar包关联的源代码进行调试?
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值