SpringBoot内置工具类,告别瞎写工具类了

不知大家有没有注意到,接手的项目中存在多个重复的工具类,发现其中很多功能,Spring 自带的都有。于是整理了本文,希望能够帮助到大家!

  • 断言是一个逻辑判断,用于检查不应该发生的情况
  • Assert 关键字在 JDK1.4 中引入,可通过 JVM 参数-enableassertions开启
  • SpringBoot 中提供了 Assert 断言工具类,通常用于数据合法性检查

查看代码

// 要求参数 object 必须为非空(Not Null),否则抛出异常,不予放行
// 参数 message 参数用于定制异常信息。
void notNull(Object object, String message)

// 要求参数必须空(Null),否则抛出异常,不予『放行』。
// 和 notNull() 方法断言规则相反
void isNull(Object object, String message)

// 要求参数必须为真(True),否则抛出异常,不予『放行』。
void isTrue(boolean expression, String message)

// 要求参数(List/Set)必须非空(Not Empty),否则抛出异常,不予放行
void notEmpty(Collection collection, String message)

// 要求参数(String)必须有长度(即,Not Empty),否则抛出异常,不予放行
void hasLength(String text, String message)

// 要求参数(String)必须有内容(即,Not Blank),否则抛出异常,不予放行
void hasText(String text, String message)

// 要求参数是指定类型的实例,否则抛出异常,不予放行
void isInstanceOf(Class type, Object obj, String message)

// 要求参数 subType 必须是参数 superType 的子类或实现类,否则抛出异常,不予放行
void isAssignable(Class superType, Class subType, String message)

1.ObjectUtils

获取对象的基本信息:

查看代码

 // 获取对象的类名。参数为 null 时,返回字符串:"null"
String nullSafeClassName(Object obj)

// 参数为 null 时,返回 0
int nullSafeHashCode(Object object)

// 参数为 null 时,返回字符串:"null"
String nullSafeToString(boolean[] array)

// 获取对象 HashCode(十六进制形式字符串)。参数为 null 时,返回 0
String getIdentityHexString(Object obj)

// 获取对象的类名和 HashCode。参数为 null 时,返回字符串:""
String identityToString(Object obj)

// 相当于 toString()方法,但参数为 null 时,返回字符串:""
String getDisplayString(Object obj)

判断工具:

查看代码

 // 判断数组是否为空
boolean isEmpty(Object[] array)

// 判断参数对象是否是数组
boolean isArray(Object obj)

// 判断数组中是否包含指定元素
boolean containsElement(Object[] array, Object element)

// 相等,或同为 null时,返回 true
boolean nullSafeEquals(Object o1, Object o2)

/**
* 判断参数对象是否为空,判断标准为:
*  Optional: Optional.empty()
*  Array: length == 0
*  CharSequence: length == 0
*  Collection: Collection.isEmpty()
*  Map: Map.isEmpty()
*/
boolean isEmpty(Object obj)

其他工具方法:

// 向参数数组的末尾追加新元素,并返回一个新数组
<a, o extends a> A[] addObjectToArray(A[] array, O obj)

// &#x539F;&#x751F;&#x57FA;&#x7840;&#x7C7B;&#x578B;&#x6570;&#x7EC4; --> &#x5305;&#x88C5;&#x7C7B;&#x6570;&#x7EC4;
Object[] toObjectArray(Object source)</a,>

2.StringUtils

字符串判断工具:

查看代码

&#xA0;// &#x5224;&#x65AD;&#x5B57;&#x7B26;&#x4E32;&#x662F;&#x5426;&#x4E3A; null&#xFF0C;&#x6216; ""&#x3002;&#x6CE8;&#x610F;&#xFF0C;&#x5305;&#x542B;&#x7A7A;&#x767D;&#x7B26;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x4E3A;&#x975E;&#x7A7A;
boolean isEmpty(Object str)

// &#x5224;&#x65AD;&#x5B57;&#x7B26;&#x4E32;&#x662F;&#x5426;&#x662F;&#x4EE5;&#x6307;&#x5B9A;&#x5185;&#x5BB9;&#x7ED3;&#x675F;&#x3002;&#x5FFD;&#x7565;&#x5927;&#x5C0F;&#x5199;
boolean endsWithIgnoreCase(String str, String suffix)

// &#x5224;&#x65AD;&#x5B57;&#x7B26;&#x4E32;&#x662F;&#x5426;&#x5DF2;&#x6307;&#x5B9A;&#x5185;&#x5BB9;&#x5F00;&#x5934;&#x3002;&#x5FFD;&#x7565;&#x5927;&#x5C0F;&#x5199;
boolean startsWithIgnoreCase(String str, String prefix)

// &#x662F;&#x5426;&#x5305;&#x542B;&#x7A7A;&#x767D;&#x7B26;
boolean containsWhitespace(String str)

// &#x5224;&#x65AD;&#x5B57;&#x7B26;&#x4E32;&#x975E;&#x7A7A;&#x4E14;&#x957F;&#x5EA6;&#x4E0D;&#x4E3A; 0&#xFF0C;&#x5373;&#xFF0C;Not Empty
boolean hasLength(CharSequence str)

// &#x5224;&#x65AD;&#x5B57;&#x7B26;&#x4E32;&#x662F;&#x5426;&#x5305;&#x542B;&#x5B9E;&#x9645;&#x5185;&#x5BB9;&#xFF0C;&#x5373;&#x975E;&#x4EC5;&#x5305;&#x542B;&#x7A7A;&#x767D;&#x7B26;&#xFF0C;&#x4E5F;&#x5C31;&#x662F; Not Blank
boolean hasText(CharSequence str)

// &#x5224;&#x65AD;&#x5B57;&#x7B26;&#x4E32;&#x6307;&#x5B9A;&#x7D22;&#x5F15;&#x5904;&#x662F;&#x5426;&#x5305;&#x542B;&#x4E00;&#x4E2A;&#x5B50;&#x4E32;&#x3002;
boolean substringMatch(CharSequence str, int index, CharSequence substring)

// &#x8BA1;&#x7B97;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x4E2D;&#x6307;&#x5B9A;&#x5B50;&#x4E32;&#x7684;&#x51FA;&#x73B0;&#x6B21;&#x6570;
int countOccurrencesOf(String str, String sub)

字符串操作工具:

查看代码

&#xA0;// &#x67E5;&#x627E;&#x5E76;&#x66FF;&#x6362;&#x6307;&#x5B9A;&#x5B50;&#x4E32;
String replace(String inString, String oldPattern, String newPattern)

// &#x53BB;&#x9664;&#x5C3E;&#x90E8;&#x7684;&#x7279;&#x5B9A;&#x5B57;&#x7B26;
String trimTrailingCharacter(String str, char trailingCharacter)

// &#x53BB;&#x9664;&#x5934;&#x90E8;&#x7684;&#x7279;&#x5B9A;&#x5B57;&#x7B26;
String trimLeadingCharacter(String str, char leadingCharacter)

// &#x53BB;&#x9664;&#x5934;&#x90E8;&#x7684;&#x7A7A;&#x767D;&#x7B26;
String trimLeadingWhitespace(String str)

// &#x53BB;&#x9664;&#x5934;&#x90E8;&#x7684;&#x7A7A;&#x767D;&#x7B26;
String trimTrailingWhitespace(String str)

// &#x53BB;&#x9664;&#x5934;&#x90E8;&#x548C;&#x5C3E;&#x90E8;&#x7684;&#x7A7A;&#x767D;&#x7B26;
String trimWhitespace(String str)

// &#x5220;&#x9664;&#x5F00;&#x5934;&#x3001;&#x7ED3;&#x5C3E;&#x548C;&#x4E2D;&#x95F4;&#x7684;&#x7A7A;&#x767D;&#x7B26;
String trimAllWhitespace(String str)

// &#x5220;&#x9664;&#x6307;&#x5B9A;&#x5B50;&#x4E32;
String delete(String inString, String pattern)

// &#x5220;&#x9664;&#x6307;&#x5B9A;&#x5B57;&#x7B26;&#xFF08;&#x53EF;&#x4EE5;&#x662F;&#x591A;&#x4E2A;&#xFF09;
String deleteAny(String inString, String charsToDelete)

// &#x5BF9;&#x6570;&#x7EC4;&#x7684;&#x6BCF;&#x4E00;&#x9879;&#x6267;&#x884C; trim() &#x65B9;&#x6CD5;
String[] trimArrayElements(String[] array)

// &#x5C06; URL &#x5B57;&#x7B26;&#x4E32;&#x8FDB;&#x884C;&#x89E3;&#x7801;
String uriDecode(String source, Charset charset)

路径相关工具方法:

查看代码

&#xA0;// &#x89E3;&#x6790;&#x8DEF;&#x5F84;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x4F18;&#x5316;&#x5176;&#x4E2D;&#x7684; &#x201C;..&#x201D;
String cleanPath(String path)

// &#x89E3;&#x6790;&#x8DEF;&#x5F84;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x89E3;&#x6790;&#x51FA;&#x6587;&#x4EF6;&#x540D;&#x90E8;&#x5206;
String getFilename(String path)

// &#x89E3;&#x6790;&#x8DEF;&#x5F84;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x89E3;&#x6790;&#x51FA;&#x6587;&#x4EF6;&#x540E;&#x7F00;&#x540D;
String getFilenameExtension(String path)

// &#x6BD4;&#x8F83;&#x4E24;&#x4E2A;&#x4E24;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x5224;&#x65AD;&#x662F;&#x5426;&#x662F;&#x540C;&#x4E00;&#x4E2A;&#x8DEF;&#x5F84;&#x3002;&#x4F1A;&#x81EA;&#x52A8;&#x5904;&#x7406;&#x8DEF;&#x5F84;&#x4E2D;&#x7684; &#x201C;..&#x201D;
boolean pathEquals(String path1, String path2)

// &#x5220;&#x9664;&#x6587;&#x4EF6;&#x8DEF;&#x5F84;&#x540D;&#x4E2D;&#x7684;&#x540E;&#x7F00;&#x90E8;&#x5206;
String stripFilenameExtension(String path)

// &#x4EE5; &#x201C;. &#x4F5C;&#x4E3A;&#x5206;&#x9694;&#x7B26;&#xFF0C;&#x83B7;&#x53D6;&#x5176;&#x6700;&#x540E;&#x4E00;&#x90E8;&#x5206;
String unqualify(String qualifiedName)

// &#x4EE5;&#x6307;&#x5B9A;&#x5B57;&#x7B26;&#x4F5C;&#x4E3A;&#x5206;&#x9694;&#x7B26;&#xFF0C;&#x83B7;&#x53D6;&#x5176;&#x6700;&#x540E;&#x4E00;&#x90E8;&#x5206;
String unqualify(String qualifiedName, char separator)

3.CollectionUtils

集合判断工具:

查看代码

&#xA0;// &#x5224;&#x65AD; List/Set &#x662F;&#x5426;&#x4E3A;&#x7A7A;
boolean isEmpty(Collection<?> collection)

// &#x5224;&#x65AD; Map &#x662F;&#x5426;&#x4E3A;&#x7A7A;
boolean isEmpty(Map<?,?> map)

// &#x5224;&#x65AD; List/Set &#x4E2D;&#x662F;&#x5426;&#x5305;&#x542B;&#x67D0;&#x4E2A;&#x5BF9;&#x8C61;
boolean containsInstance(Collection<?> collection, Object element)

// &#x4EE5;&#x8FED;&#x4EE3;&#x5668;&#x7684;&#x65B9;&#x5F0F;&#xFF0C;&#x5224;&#x65AD; List/Set &#x4E2D;&#x662F;&#x5426;&#x5305;&#x542B;&#x67D0;&#x4E2A;&#x5BF9;&#x8C61;
boolean contains(Iterator<?> iterator, Object element)

// &#x5224;&#x65AD; List/Set &#x662F;&#x5426;&#x5305;&#x542B;&#x67D0;&#x4E9B;&#x5BF9;&#x8C61;&#x4E2D;&#x7684;&#x4EFB;&#x610F;&#x4E00;&#x4E2A;
boolean containsAny(Collection<?> source, Collection<?> candidates)

// &#x5224;&#x65AD; List/Set &#x4E2D;&#x7684;&#x6BCF;&#x4E2A;&#x5143;&#x7D20;&#x662F;&#x5426;&#x552F;&#x4E00;&#x3002;&#x5373; List/Set &#x4E2D;&#x4E0D;&#x5B58;&#x5728;&#x91CD;&#x590D;&#x5143;&#x7D20;
boolean hasUniqueObject(Collection<?> collection)

集合操作工具:

查看代码

&#xA0;// &#x5C06; Array &#x4E2D;&#x7684;&#x5143;&#x7D20;&#x90FD;&#x6DFB;&#x52A0;&#x5230; List/Set &#x4E2D;
<e> void mergeArrayIntoCollection(Object array, Collection<e> collection)

// &#x5C06; Properties &#x4E2D;&#x7684;&#x952E;&#x503C;&#x5BF9;&#x90FD;&#x6DFB;&#x52A0;&#x5230; Map &#x4E2D;
<k,v> void mergePropertiesIntoMap(Properties props, Map<k,v> map)

// &#x8FD4;&#x56DE; List &#x4E2D;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x5143;&#x7D20;
<t> T lastElement(List<t> list)

// &#x8FD4;&#x56DE; Set &#x4E2D;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x5143;&#x7D20;
<t> T lastElement(Set<t> set)

// &#x8FD4;&#x56DE;&#x53C2;&#x6570; candidates &#x4E2D;&#x7B2C;&#x4E00;&#x4E2A;&#x5B58;&#x5728;&#x4E8E;&#x53C2;&#x6570; source &#x4E2D;&#x7684;&#x5143;&#x7D20;
<e> E findFirstMatch(Collection<?> source, Collection<e> candidates)

// &#x8FD4;&#x56DE; List/Set &#x4E2D;&#x6307;&#x5B9A;&#x7C7B;&#x578B;&#x7684;&#x5143;&#x7D20;&#x3002;
<t> T findValueOfType(Collection<?> collection, Class<t> type)

// &#x8FD4;&#x56DE; List/Set &#x4E2D;&#x6307;&#x5B9A;&#x7C7B;&#x578B;&#x7684;&#x5143;&#x7D20;&#x3002;&#x5982;&#x679C;&#x7B2C;&#x4E00;&#x79CD;&#x7C7B;&#x578B;&#x672A;&#x627E;&#x5230;&#xFF0C;&#x5219;&#x67E5;&#x627E;&#x7B2C;&#x4E8C;&#x79CD;&#x7C7B;&#x578B;&#xFF0C;&#x4EE5;&#x6B64;&#x7C7B;&#x63A8;
Object findValueOfType(Collection<?> collection, Class<?>[] types)

// &#x8FD4;&#x56DE; List/Set &#x4E2D;&#x5143;&#x7D20;&#x7684;&#x7C7B;&#x578B;
Class<?> findCommonElementType(Collection<?> collection)</t></t></e></e></t></t></t></t></k,v></k,v></e></e>

1.FileCopyUtils

输入:

// &#x4ECE;&#x6587;&#x4EF6;&#x4E2D;&#x8BFB;&#x5165;&#x5230;&#x5B57;&#x8282;&#x6570;&#x7EC4;&#x4E2D;
byte[] copyToByteArray(File in)

// &#x4ECE;&#x8F93;&#x5165;&#x6D41;&#x4E2D;&#x8BFB;&#x5165;&#x5230;&#x5B57;&#x8282;&#x6570;&#x7EC4;&#x4E2D;
byte[] copyToByteArray(InputStream in)

// &#x4ECE;&#x8F93;&#x5165;&#x6D41;&#x4E2D;&#x8BFB;&#x5165;&#x5230;&#x5B57;&#x7B26;&#x4E32;&#x4E2D;
String copyToString(Reader in)

输出:

查看代码

&#xA0;// &#x4ECE;&#x5B57;&#x8282;&#x6570;&#x7EC4;&#x5230;&#x6587;&#x4EF6;
void copy(byte[] in, File out)

// &#x4ECE;&#x6587;&#x4EF6;&#x5230;&#x6587;&#x4EF6;
int copy(File in, File out)

// &#x4ECE;&#x5B57;&#x8282;&#x6570;&#x7EC4;&#x5230;&#x8F93;&#x51FA;&#x6D41;
void copy(byte[] in, OutputStream out)

// &#x4ECE;&#x8F93;&#x5165;&#x6D41;&#x5230;&#x8F93;&#x51FA;&#x6D41;
int copy(InputStream in, OutputStream out)

// &#x4ECE;&#x8F93;&#x5165;&#x6D41;&#x5230;&#x8F93;&#x51FA;&#x6D41;
int copy(Reader in, Writer out)

// &#x4ECE;&#x5B57;&#x7B26;&#x4E32;&#x5230;&#x8F93;&#x51FA;&#x6D41;
void copy(String in, Writer out)

2.ResourceUtils

从资源路径获取文件:

// &#x5224;&#x65AD;&#x5B57;&#x7B26;&#x4E32;&#x662F;&#x5426;&#x662F;&#x4E00;&#x4E2A;&#x5408;&#x6CD5;&#x7684; URL &#x5B57;&#x7B26;&#x4E32;&#x3002;
static boolean isUrl(String resourceLocation)

// &#x83B7;&#x53D6; URL
static URL getURL(String resourceLocation)

// &#x83B7;&#x53D6;&#x6587;&#x4EF6;&#xFF08;&#x5728; JAR &#x5305;&#x5185;&#x65E0;&#x6CD5;&#x6B63;&#x5E38;&#x4F7F;&#x7528;&#xFF0C;&#x9700;&#x8981;&#x662F;&#x4E00;&#x4E2A;&#x72EC;&#x7ACB;&#x7684;&#x6587;&#x4EF6;&#xFF09;
static File getFile(String resourceLocation)

Resource:

查看代码

&#xA0;// &#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x8D44;&#x6E90; D:\...

FileSystemResource

// URL &#x8D44;&#x6E90;&#xFF0C;&#x5982; file://... http://...

UrlResource

// &#x7C7B;&#x8DEF;&#x5F84;&#x4E0B;&#x7684;&#x8D44;&#x6E90;&#xFF0C;classpth:...

ClassPathResource

// Web &#x5BB9;&#x5668;&#x4E0A;&#x4E0B;&#x6587;&#x4E2D;&#x7684;&#x8D44;&#x6E90;&#xFF08;jar &#x5305;&#x3001;war &#x5305;&#xFF09;
ServletContextResource

// &#x5224;&#x65AD;&#x8D44;&#x6E90;&#x662F;&#x5426;&#x5B58;&#x5728;
boolean exists()

// &#x4ECE;&#x8D44;&#x6E90;&#x4E2D;&#x83B7;&#x5F97; File &#x5BF9;&#x8C61;
File getFile()

// &#x4ECE;&#x8D44;&#x6E90;&#x4E2D;&#x83B7;&#x5F97; URI &#x5BF9;&#x8C61;
URI getURI()

// &#x4ECE;&#x8D44;&#x6E90;&#x4E2D;&#x83B7;&#x5F97; URI &#x5BF9;&#x8C61;
URL getURL()

// &#x83B7;&#x5F97;&#x8D44;&#x6E90;&#x7684; InputStream
InputStream getInputStream()

// &#x83B7;&#x5F97;&#x8D44;&#x6E90;&#x7684;&#x63CF;&#x8FF0;&#x4FE1;&#x606F;
String getDescription()

3.StreamUtils

输入:

查看代码

&#xA0;/**
   * &#x5C06;&#x7ED9;&#x5B9A;&#x7684; {@code byte[]} &#x5B57;&#x8282;&#x6570;&#x7EC4;&#x5185;&#x5BB9;&#x590D;&#x5236;&#x5230;&#x7ED9;&#x5B9A;&#x7684; {@link OutputStream} &#x4E2D;&#xFF0C;&#x5B8C;&#x6210;&#x540E;&#x4FDD;&#x6301;&#x6D41;&#x7684;&#x6253;&#x5F00;&#x72B6;&#x6001;&#x3002;
   * @param in &#x4F5C;&#x4E3A;&#x6765;&#x6E90;&#x7684;&#x5B57;&#x8282;&#x6570;&#x7EC4;
   * @param out &#x590D;&#x5236;&#x5230;&#x76EE;&#x6807;&#x8F93;&#x51FA;&#x6D41;
   */
void copy(byte[] in, OutputStream out)

/**
   * &#x5C06;&#x7ED9;&#x5B9A;&#x7684; {@link InputStream} &#x5185;&#x5BB9;&#x590D;&#x5236;&#x5230;&#x7ED9;&#x5B9A;&#x7684; {@link OutputStream} &#x4E2D;&#xFF0C;&#x5B8C;&#x6210;&#x540E;&#x4FDD;&#x6301;&#x6D41;&#x7684;&#x6253;&#x5F00;&#x72B6;&#x6001;&#x3002;
   * @param in &#x6570;&#x636E;&#x6765;&#x6E90;&#x8F93;&#x5165;&#x6D41;
   * @param out &#x590D;&#x5236;&#x5230;&#x76EE;&#x6807;&#x8F93;&#x51FA;&#x6D41;
   * @return &#x590D;&#x5236;&#x4E86;&#x591A;&#x5C11;&#x5B57;&#x8282;
   */
int copy(InputStream in, OutputStream out)

/**
   * &#x5C06;&#x7ED9;&#x5B9A;&#x7684;&#x5B57;&#x7B26;&#x4E32; {@link String} &#x5185;&#x5BB9;&#x590D;&#x5236;&#x5230;&#x7ED9;&#x5B9A;&#x7684; {@link OutputStream} &#x4E2D;&#xFF0C;&#x5B8C;&#x6210;&#x540E;&#x4FDD;&#x6301;&#x6D41;&#x7684;&#x6253;&#x5F00;&#x72B6;&#x6001;&#x3002;
   * @param in &#x6570;&#x636E;&#x6765;&#x6E90;&#xFF1A;&#x5B57;&#x7B26;&#x4E32;
   * @param charset &#x6765;&#x6E90;&#x5B57;&#x7B26;&#x4E32;&#x5BF9;&#x5E94;&#x7684;&#x5B57;&#x7B26;&#x96C6;
   * @param out &#x590D;&#x5236;&#x5230;&#x76EE;&#x6807;&#x8F93;&#x51FA;&#x6D41;
   */
void copy(String in, Charset charset, OutputStream out)

/**
   * &#x5C06;&#x7ED9;&#x5B9A;&#x7684; {@link InputStream} &#x5185;&#x5BB9;&#x590D;&#x5236;&#x5230;&#x7ED9;&#x5B9A;&#x7684; {@link OutputStream} &#x4E2D;&#xFF0C;
   * &#x5982;&#x679C;&#x6307;&#x5B9A;&#x7684;&#x590D;&#x5236;&#x8303;&#x56F4;&#x671D;&#x51FA;&#x4E86; {@code InputStream} &#x7684;&#x5927;&#x5C0F;&#xFF0C;&#x5219;&#x8FD4;&#x56DE;&#x5B9E;&#x9645;&#x590D;&#x5236;&#x4E86;&#x591A;&#x5C11;&#x5B57;&#x8282;&#x3002;
   * &#x4E24;&#x4E2A;&#x6D41;&#x5B8C;&#x6210;&#x540E;&#x90FD;&#x4FDD;&#x6301;&#x6253;&#x5F00;&#x72B6;&#x6001;&#x3002;
   * @param in &#x6570;&#x636E;&#x6765;&#x6E90;&#x8F93;&#x5165;&#x6D41;
   * @param out &#x590D;&#x5236;&#x5230;&#x76EE;&#x6807;&#x8F93;&#x51FA;&#x6D41;
   * @param start &#x5F00;&#x59CB;&#x590D;&#x5236;&#x7684;&#x4F4D;&#x7F6E;
   * @param end &#x7ED3;&#x675F;&#x590D;&#x5236;&#x7684;&#x4F4D;&#x7F6E;
   * @return &#x590D;&#x5236;&#x4E86;&#x591A;&#x5C11;&#x5B57;&#x8282;
   */
long copyRange(InputStream in, OutputStream out, long start, long end)

输出:

查看代码

&#xA0;/**
  * &#x5C06;&#x7ED9;&#x5B9A;&#x7684; {@link InputStream} &#x5185;&#x5BB9;&#x590D;&#x5236;&#x5230;&#x65B0;&#x7684; {@code byte[]} &#x4E2D;&#xFF0C;&#x5B8C;&#x6210;&#x540E;&#x4FDD;&#x6301;&#x6D41;&#x7684;&#x6253;&#x5F00;&#x72B6;&#x6001;&#x3002;
  * @param in &#x4F5C;&#x4E3A;&#x6570;&#x636E;&#x6765;&#x6E90;&#x7684;&#x8F93;&#x5165;&#x6D41;(&#x53EF;&#x80FD;&#x4E3A; {@code null} &#x6216; &#x7A7A;)
  * @return &#x4E00;&#x4E2A;&#x63A5;&#x6536;&#x4E86;&#x6570;&#x636E;&#x7684;&#x65B0;&#x5B57;&#x8282;&#x6570;&#x7EC4; byte[] (&#x53EF;&#x80FD;&#x4E3A; &#x7A7A;)
  */
byte[] copyToByteArray(InputStream in)

/**
  * &#x5C06;&#x7ED9;&#x5B9A;&#x7684; {@link InputStream} &#x5185;&#x5BB9;&#x590D;&#x5236;&#x5230; {@link String} &#x4E2D;&#xFF0C;&#x5B8C;&#x6210;&#x540E;&#x4FDD;&#x6301;&#x6D41;&#x7684;&#x6253;&#x5F00;&#x72B6;&#x6001;&#x3002;
  * @param in &#x4F5C;&#x4E3A;&#x6570;&#x636E;&#x6765;&#x6E90;&#x7684;&#x8F93;&#x5165;&#x6D41;(&#x53EF;&#x80FD;&#x4E3A; {@code null} &#x6216; &#x7A7A;)
  * @param charset {@link Charset}&#x89E3;&#x7801;&#x6240;&#x9700;&#x5B57;&#x7B26;&#x96C6;
  * @return &#x4E00;&#x4E2A;&#x63A5;&#x6536;&#x4E86;&#x6570;&#x636E;&#x7684;&#x5B57;&#x7B26;&#x4E32; String (&#x53EF;&#x80FD;&#x4E3A; &#x7A7A;)
  */
String copyToString(InputStream in, Charset charset)

/**
  * &#x6E05;&#x9664;&#x7ED9;&#x5B9A;&#x6D41;&#x4E2D;&#x7684;&#x5269;&#x4F59;&#x5185;&#x5BB9;&#xFF0C;&#x5B8C;&#x6210;&#x540E;&#x4FDD;&#x6301;&#x6D41;&#x7684;&#x6253;&#x5F00;&#x72B6;&#x6001;&#x3002;
  * @param in &#x9700;&#x8981;&#x6E05;&#x7A7A;&#x7684;&#x8F93;&#x5165;&#x6D41;
  * @return &#x8BFB;&#x53D6;&#x5230;&#x591A;&#x5C11;&#x5B57;&#x8282;
  */
int drain(InputStream in)

1.ReflectionUtils

获取方法:

查看代码

&#xA0;// &#x5728;&#x7C7B;&#x4E2D;&#x67E5;&#x627E;&#x6307;&#x5B9A;&#x65B9;&#x6CD5;
Method findMethod(Class<?> clazz, String name)

// &#x540C;&#x4E0A;&#xFF0C;&#x989D;&#x5916;&#x63D0;&#x4F9B;&#x65B9;&#x6CD5;&#x53C2;&#x6570;&#x7C7B;&#x578B;&#x4F5C;&#x67E5;&#x627E;&#x6761;&#x4EF6;
Method findMethod(Class<?> clazz, String name, Class<?>... paramTypes)

// &#x83B7;&#x5F97;&#x7C7B;&#x4E2D;&#x6240;&#x6709;&#x65B9;&#x6CD5;&#xFF0C;&#x5305;&#x62EC;&#x7EE7;&#x627F;&#x800C;&#x6765;&#x7684;
Method[] getAllDeclaredMethods(Class<?> leafClass)

// &#x5728;&#x7C7B;&#x4E2D;&#x67E5;&#x627E;&#x6307;&#x5B9A;&#x6784;&#x9020;&#x65B9;&#x6CD5;
Constructor<t> accessibleConstructor(Class<t> clazz, Class<?>... parameterTypes)

// &#x662F;&#x5426;&#x662F; equals() &#x65B9;&#x6CD5;
boolean isEqualsMethod(Method method)

// &#x662F;&#x5426;&#x662F; hashCode() &#x65B9;&#x6CD5;
boolean isHashCodeMethod(Method method)

// &#x662F;&#x5426;&#x662F; toString() &#x65B9;&#x6CD5;
boolean isToStringMethod(Method method)

// &#x662F;&#x5426;&#x662F;&#x4ECE; Object &#x7C7B;&#x7EE7;&#x627F;&#x800C;&#x6765;&#x7684;&#x65B9;&#x6CD5;
boolean isObjectMethod(Method method)

// &#x68C0;&#x67E5;&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;&#x662F;&#x5426;&#x58F0;&#x660E;&#x629B;&#x51FA;&#x6307;&#x5B9A;&#x5F02;&#x5E38;
boolean declaresException(Method method, Class<?> exceptionType)</t></t>

执行方法:

// &#x6267;&#x884C;&#x65B9;&#x6CD5;
Object invokeMethod(Method method, Object target)

// &#x540C;&#x4E0A;&#xFF0C;&#x63D0;&#x4F9B;&#x65B9;&#x6CD5;&#x53C2;&#x6570;
Object invokeMethod(Method method, Object target, Object... args)

// &#x53D6;&#x6D88; Java &#x6743;&#x9650;&#x68C0;&#x67E5;&#x3002;&#x4EE5;&#x4FBF;&#x540E;&#x7EED;&#x6267;&#x884C;&#x8BE5;&#x79C1;&#x6709;&#x65B9;&#x6CD5;
void makeAccessible(Method method)

// &#x53D6;&#x6D88; Java &#x6743;&#x9650;&#x68C0;&#x67E5;&#x3002;&#x4EE5;&#x4FBF;&#x540E;&#x7EED;&#x6267;&#x884C;&#x79C1;&#x6709;&#x6784;&#x9020;&#x65B9;&#x6CD5;
void makeAccessible(Constructor<?> ctor)

获取字段:

// &#x5728;&#x7C7B;&#x4E2D;&#x67E5;&#x627E;&#x6307;&#x5B9A;&#x5C5E;&#x6027;
Field findField(Class<?> clazz, String name)

// &#x540C;&#x4E0A;&#xFF0C;&#x591A;&#x63D0;&#x4F9B;&#x4E86;&#x5C5E;&#x6027;&#x7684;&#x7C7B;&#x578B;
Field findField(Class<?> clazz, String name, Class<?> type)

// &#x662F;&#x5426;&#x4E3A;&#x4E00;&#x4E2A; "public static final" &#x5C5E;&#x6027;
boolean isPublicStaticFinal(Field field)

设置字段:

查看代码

&#xA0;// &#x83B7;&#x53D6; target &#x5BF9;&#x8C61;&#x7684; field &#x5C5E;&#x6027;&#x503C;
Object getField(Field field, Object target)

// &#x8BBE;&#x7F6E; target &#x5BF9;&#x8C61;&#x7684; field &#x5C5E;&#x6027;&#x503C;&#xFF0C;&#x503C;&#x4E3A; value
void setField(Field field, Object target, Object value)

// &#x540C;&#x7C7B;&#x5BF9;&#x8C61;&#x5C5E;&#x6027;&#x5BF9;&#x7B49;&#x8D4B;&#x503C;
void shallowCopyFieldState(Object src, Object dest)

// &#x53D6;&#x6D88; Java &#x7684;&#x6743;&#x9650;&#x63A7;&#x5236;&#x68C0;&#x67E5;&#x3002;&#x4EE5;&#x4FBF;&#x540E;&#x7EED;&#x8BFB;&#x5199;&#x8BE5;&#x79C1;&#x6709;&#x5C5E;&#x6027;
void makeAccessible(Field field)

// &#x5BF9;&#x7C7B;&#x7684;&#x6BCF;&#x4E2A;&#x5C5E;&#x6027;&#x6267;&#x884C; callback
void doWithFields(Class<?> clazz, ReflectionUtils.FieldCallback fc)

// &#x540C;&#x4E0A;&#xFF0C;&#x591A;&#x4E86;&#x4E2A;&#x5C5E;&#x6027;&#x8FC7;&#x6EE4;&#x529F;&#x80FD;&#x3002;
void doWithFields(Class<?> clazz, ReflectionUtils.FieldCallback fc,
                  ReflectionUtils.FieldFilter ff)

// &#x540C;&#x4E0A;&#xFF0C;&#x4F46;&#x4E0D;&#x5305;&#x62EC;&#x7EE7;&#x627F;&#x800C;&#x6765;&#x7684;&#x5C5E;&#x6027;
void doWithLocalFields(Class<?> clazz, ReflectionUtils.FieldCallback fc)

2.AopUtils

判断代理类型:

// &#x5224;&#x65AD;&#x662F;&#x4E0D;&#x662F; Spring &#x4EE3;&#x7406;&#x5BF9;&#x8C61;
boolean isAopProxy()

// &#x5224;&#x65AD;&#x662F;&#x4E0D;&#x662F; jdk &#x52A8;&#x6001;&#x4EE3;&#x7406;&#x5BF9;&#x8C61;
isJdkDynamicProxy()

// &#x5224;&#x65AD;&#x662F;&#x4E0D;&#x662F; CGLIB &#x4EE3;&#x7406;&#x5BF9;&#x8C61;
boolean isCglibProxy()

获取被代理对象的 class:

// &#x83B7;&#x53D6;&#x88AB;&#x4EE3;&#x7406;&#x7684;&#x76EE;&#x6807; class
Class<?> getTargetClass()

3.AopContext

获取当前对象的代理对象:

Object currentProxy()

Original: https://www.cnblogs.com/wyj-java/p/16823826.html
Author: Javaの甘乃迪
Title: SpringBoot内置工具类,告别瞎写工具类了

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/800239/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Python 这几种方法进行机器学习特征筛选,有效提升模型性能

    大家好,今天我来说说如何对数据集进行特征筛选,有时候我们拿到的数据集是非常庞大的,但模型其实真的不需要这么多的数据,减少冗余的数据必不可少,这样可以带来很多的好处,例如 提高预测的…

    Python 2023年8月8日
    073
  • Pytest教程系列(1)–如何将Unittest脚本修改为Pytest脚本

    ### 回答1: pytest_是一种灵活而强大的自动化测试框架,用于编写和执行测试用例。在 _pytest_的面试中,可能会涉及以下问题: 1. 你是如何使用 _pytest_进…

    Python 2023年9月11日
    065
  • NumPy库—NAN和INF值

    1. 认识 首先了解一下这两个英文单词的含义: import numpy as np data = np.random.randint(0,10,size=(3,5)) data …

    Python 2023年8月28日
    066
  • 纸牌博弈问题

    纸牌博弈问题 作者:Grey 原文地址: 博客园:纸牌博弈问题 CSDN:纸牌博弈问题 题目描述 有一个整型数组 A,代表数值不同的纸牌排成一条线。玩家 a 和玩家 b 依次拿走每…

    Python 2023年10月16日
    030
  • 不就是Redis吗?竟让我一个月拿了8个offer,其中两家都是一线大厂

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年10月7日
    059
  • Python遇到的问题(一)

    目录 ​​一、中文编码问题​​ ​​1、展示​​ ​​2、解决办法​​ ​​ 二、python输入的光标变成了横线_光标变成下划线​​ ​​1、演示​​ ​​ 2、影响​​ ​​3…

    Python 2023年5月24日
    063
  • Python实现Token详解,JWT

    文章目录 Python实现Token详解 * 一、引言 二、原理 三、python实现JWT-token 四、JWT – Json-Web-Token – …

    Python 2023年8月4日
    071
  • Python Scrapy爬虫框架详解

    Python Scrapy爬虫框架详解 Scrapy 是一个基于 Twisted 实现的异步处理爬虫框架,该框架使用纯 Python 语言编写。Scrapy 框架应用广泛,常用于数…

    Python 2023年10月1日
    049
  • django项目部署

    文章目录 * – 1安装git – 2 购买云服务器 – 3 云服务器安装数据库mysql – 4 云服务器安装redis(源码安装…

    Python 2023年8月4日
    045
  • ChatGPT 这玩意好吓人,真能颠覆搜索引擎?

    大家好,我是校长。 前一段风靡世界的是 AI 绘画,不过,这两天又有一个 AI 聊天机器人风靡世界了,热度简直比 AI 绘画有过之而无不及。 这个东西就是 ChatGPT ,IT …

    Python 2023年11月4日
    048
  • 中秋节的特别礼物—-属于程序员的专有浪漫

    &#x524D;&#x8A00;&#xFF1A; 马上不就到中秋节了嘛,我看到群里很多小伙伴们在纠结如何去送出属于自己的专属浪漫,也有小伙伴私信我,说想让我…

    Python 2023年8月1日
    055
  • 【Pyhacker编写指南】端口扫描器

    这节课是巡安似海PyHacker编写指南的《 端口扫描器编写》 主要是以Nmap举例编写,其中涉及的协议暂不过多讨论 喜欢用Python写脚本的小伙伴可以跟着一起写一写呀。 编写环…

    Python 2023年6月12日
    061
  • 稀疏数组问题

    稀疏数组 实际需求:在写五子棋的程序中,有存盘退出和续上盘的功能 分析问题:因为该二维数组的很多值默认为0,因此记录了很多没有意义的数据->稀疏数组 思路分析 二维数组转稀疏…

    Python 2023年11月5日
    034
  • 二叉树的最小深度问题

    原文地址: 题目描述 给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。 本题可以用两种方法来解,第一种方…

    Python 2023年10月13日
    037
  • 一篇文章让你搞懂Java中的静态代理和动态代理

    什么是代理模式 代理模式是常用的java设计模式,在Java中我们通常会通过new一个对象再调用其对应的方法来访问我们需要的服务。代理模式则是通过创建代理类(proxy)的方式间接…

    Python 2023年10月18日
    041
  • Win10安装superset

    安装 superset(1)安装(更新)setuptools和pip pip install –upgrade setuptools pip -i https://pypi.do…

    Python 2023年8月13日
    042
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球