最近、同僚が重複したツール クラスを多数作成していることに気づき、その関数の多くが Spring に含まれていることがわかりました。そこで、皆さんのお役に立てればと思い、この記事をまとめました!
断言
- アサーションとは、起こってはならないことが起こっていないかどうかをチェックする論理的な判断です。
- Assert キーワードは JDK1.4 で導入され、JVM パラメータ -enableassertions を通じてオンにできます。
- SpringBoot は、通常、データの有効性チェックに使用される Assert アサーション ツール クラスを提供します。
//パラメータ オブジェクトは非 null (Not Null) である必要があります。それ以外の場合、例外がスローされ、解放されません。 // パラメータ メッセージ パラメータは、例外情報をカスタマイズするために使用されます。 void notNull(オブジェクト オブジェクト, 文字列メッセージ) // パラメータは空 (Null) である必要があります。そうでない場合は、例外がスローされ、「解放」されません。 // notNull() メソッドのアサーション ルールに反します void isNull(オブジェクト オブジェクト, 文字列メッセージ) // 必須パラメータは true (True) である必要があります。そうでない場合は、例外がスローされ、「解放」されません。 void isTrue(ブール式、文字列メッセージ) // パラメータ (List/Set) は空ではない (Not Empty) 必要があります。そうでない場合は、例外がスローされ、解放されません。 void notEmpty(コレクション コレクション, 文字列メッセージ) // パラメータ (String) には長さ (つまり空でない) が必要です。そうでない場合は例外がスローされ、解放されません。 void hasLength(文字列テキスト, 文字列メッセージ) // パラメータ (String) にはコンテンツ (つまり、空ではない) が含まれている必要があります。そうでない場合は、例外がスローされ、解放されません。 void hasText(文字列テキスト, 文字列メッセージ) // パラメータは指定された型のインスタンスである必要があります。そうでない場合は例外がスローされ、解放されません。 void isInstanceOf(クラス タイプ、オブジェクト obj、文字列メッセージ) // パラメータ `subType` はパラメータ superType のサブクラスまたは実装クラスである必要があります。そうでない場合は例外がスローされ、解放されません。 void isAssignable(クラス superType、クラス subType、文字列メッセージ)
オブジェクト、配列、コレクション
ObjectUtils
オブジェクトの基本情報を取得する
// オブジェクトのクラス名を取得します。パラメータが null の場合、文字列「null」が返されます: 文字列 nullSafeClassName(Object obj) // パラメータが null の場合、0 を返します int nullSafeHashCode(オブジェクト オブジェクト) // パラメータが null の場合、文字列「null」を返します。 文字列 nullSafeToString(boolean[] 配列) // オブジェクトの HashCode (16 進形式の文字列) を取得します。パラメータが null の場合、0 が返されます String getIdentityHexString(Object obj) // オブジェクトのクラス名と HashCode を取得します。パラメータが null の場合、次の文字列が返されます: "" 文字列identityToString(Object obj) // toString() メソッドと同等ですが、パラメータが null の場合は文字列が返されます: "" 文字列 getDisplayString(Object obj)
判断ツール
// 配列が空かどうかを判断します ブール値 isEmpty(Object[] 配列) // パラメータ オブジェクトが配列かどうかを判断します ブール値 isArray(Object obj) // 配列に指定された要素が含まれているかどうかを判断します boolean containsElement(Object[] 配列, Object 要素) // 等しい場合、または両方が null の場合、true を返します ブール値 nullSafeEquals(オブジェクト o1, オブジェクト o2) /* パラメータ オブジェクトが空かどうかを判断する基準は次のとおりです。 オプション: Optional.empty() 配列: 長さ == 0 CharSequence: 長さ == 0 コレクション: Collection.isEmpty() マップ: Map.isEmpty() */ ブール値 isEmpty(オブジェクト obj)
その他のツールの方法
//パラメータ配列の末尾に新しい要素を追加し、新しい配列を返します // ネイティブ基本型配列 --> ラッパー クラス配列 Object[] toObjectArray(オブジェクト ソース)
Spring Bootの勉強メモ
文字列ユーティリティ
文字列判定ツール
// 文字列が null か "" かを判断します。空白文字を含む文字列は空ではないことに注意してください ブール値 isEmpty(Object str) // 文字列が指定された内容で終わるかどうかを判断します。大文字と小文字を区別しない boolean opensWithIgnoreCase(String str, String suffix) // 文字列が指定された内容で始まるかどうかを判断します。大文字と小文字を区別しない boolean startingWithIgnoreCase(String str, String prefix) // 空白文字を含めるかどうか ブール値 containsWhitespace(String str) // 文字列が空でなく、長さが 0 ではない、つまり Not Empty であるかどうかを判断します ブール値 hasLength(CharSequence str) // 文字列に実際のコンテンツが含まれているかどうか、つまり空白文字だけが含まれているかどうか、つまり Not Blank であるかどうかを判断します ブール値 hasText(CharSequence str) // 文字列の指定されたインデックスに部分文字列が含まれているかどうかを判断します。 boolean substringMatch(CharSequence str, int インデックス, CharSequence substring) // 文字列内の指定された部分文字列の出現数をカウントします int countOccurrencesOf(String str, String sub)
文字列操作ツール
// 指定された部分文字列を検索して置換します String replace(String inString, String oldPattern, String newPattern) //末尾の特定の文字を削除します StringrimTrailingCharacter(String str, char trailingCharacter) // ヘッダーから特定の文字を削除します String TrimLeadingCharacter(String str, char leadingCharacter) // 先頭の空白文字を削除します 文字列trimLeadingWhitespace(String str) // 先頭の空白文字を削除します 文字列trimTrailingWhitespace(String str) //先頭と末尾の空白文字を削除します 文字列trimWhitespace(String str) // 先頭、末尾、および中間の空白文字を削除します String TrimAllWhitespace(String str) // 指定された部分文字列を削除します 文字列削除(文字列内の文字列、文字列パターン) // 指定された文字を削除します (複数可) String deleteAny(String inString, String charsToDelete) // 配列の各項目に対して Trim() メソッドを実行します String[] TrimArrayElements(String[] 配列) // URL 文字列をデコードします 文字列 uriDecode(文字列ソース、文字セット charset)
パス関連のツールメソッド
// パス文字列を解析し、「..」を最適化します。 String cleanPath(String path) // パス文字列を解析し、ファイル名の部分を解析します String getFilename(String path) // パス文字列を解析し、ファイルのサフィックス名を解析します String getFilenameExtension(String path) // 2 つの文字列を比較して、それらが同じパスであるかどうかを判断します。パス内の「..」は自動的に処理されます boolean pathEquals(String path1, String path2) // ファイルパス名の拡張子部分を削除 文字列のstripFilenameExtension(文字列のパス) // 最後の部分を取得するには、区切り文字として「.」を使用します String unqualify(StringqualifyName) // 指定された文字を区切り文字として使用して最後の部分を取得します String unqualify(StringqualifyName, char Separator)
Spring Boot の基本チュートリアルと実践的な例をお勧めします:
https://github.com/javastacks/spring-boot-best-practice
コレクションユーティリティ
判定ツールを設定する
// リスト/セットが空かどうかを判断します boolean isEmpty(Collection<?> コレクション) // Map が空かどうかを判断する boolean isEmpty(Map<?,?> マップ) // リスト/セットにオブジェクトが含まれているかどうかを判断します boolean containsInstance(Collection<?> コレクション, Object 要素) // イテレータを使用して、List/Set にオブジェクトが含まれているかどうかを判断します boolean contains(Iterator<?> イテレータ, Object 要素) // List/Set に特定のオブジェクトのいずれかが含まれているかどうかを判断します boolean containsAny(コレクション<?> ソース、コレクション<?> 候補) // List/Set 内の各要素が一意であるかどうかを判断します。つまり、List/Set には重複する要素はありません boolean hasUniqueObject(Collection<?> コレクション)
収集操作ツール
//配列内のすべての要素をリスト/セットに追加します <E> void mergeArrayIntoCollection(Object array, Collection<E> collection) // プロパティ内のすべてのキーと値のペアをマップに追加します <K,V> void mergePropertiesIntoMap(プロパティ プロパティ, マップ<K,V> マップ) // List の最後の要素を返します <T> T lastElement(List<T> リスト) // Set の最後の要素を返します <T> T lastElement(Set<T> セット) // パラメータ ソースに存在するパラメータ候補の最初の要素を返します <E> E findFirstMatch(コレクション<?> ソース、コレクション<E> 候補) // リスト/セット内の指定された型の要素を返します。 <T>T findValueOfType(Collection<?> コレクション、Class<T> タイプ) // リスト/セット内の指定された型の要素を返します。最初のタイプが見つからない場合は、2 番目のタイプなどを探します。 オブジェクト findValueOfType(Collection<?> コレクション、Class<?>[] タイプ) // List/Set 内の要素のタイプを返します クラス<?> findCommonElementType(コレクション<?> コレクション)
ファイル、リソース、IO ストリーム
ファイルコピーユーティリティ
入力
// ファイルからバイト配列に読み取ります byte[] copyToByteArray(ファイル入力) // 入力ストリームからバイト配列に読み取ります byte[] copyToByteArray(InputStream in) // 入力ストリームから文字列を読み取ります 文字列 copyToString(Reader in)
出力
// バイト配列からファイルへ void copy(byte[] in, ファイル out) // ファイルからファイルへ int copy(ファイル入力、ファイル出力) // バイト配列から出力ストリームまで void copy(byte[] 入力、OutputStream 出力) // 入力ストリームから出力ストリームへ int copy(入力ストリーム入力、出力ストリーム出力) // 入力ストリームから出力ストリームへ int copy(リーダー入力、ライター出力) // 文字列から出力ストリームまで void copy(文字列入力、ライター出力)
Spring Bootの勉強メモ
リソースユーティリティ
リソースパスからファイルを取得
// 文字列が有効な URL 文字列であるかどうかを判断します。 静的ブール値 isUrl(String resourceLocation) // URL を取得 静的 URL getURL(String resourceLocation) // ファイルを取得します (通常、JAR パッケージでは使用できません。独立したファイルである必要があります) 静的ファイル getFile(String resourceLocation)
リソース
// ファイル システム リソース D:\... ファイルシステムリソース // URL リソース (file://... http://... など) URLリソース // クラスパスの下のリソース、classpth:... クラスパスリソース // Web コンテナ コンテキスト内のリソース (jar パッケージ、war パッケージ) サーブレットコンテキストリソース // リソースが存在するかどうかを判断します ブール値存在します() // リソースから File オブジェクトを取得します ファイル getFile() // リソースから URI オブジェクトを取得します URI getURI() // リソースから URI オブジェクトを取得します URL getURL() // リソースの InputStream を取得します InputStream getInputStream() // リソースの説明情報を取得します 文字列 getDescription()
ストリームユーティリティ
入力
void copy(byte[] 入力、OutputStream 出力) int copy(入力ストリーム入力、出力ストリーム出力) void copy(文字列入力、文字セット charset、OutputStream 出力) long copyRange(InputStream in、OutputStream out、long start、long end)
出力
byte[] copyToByteArray(InputStream in) String copyToString(InputStream in, Charset 文字セット) // 入力ストリームの内容を破棄します int ドレイン(入力ストリーム入力)
リフレクション、AOP
リフレクションユーティリティ
取得メソッド
// クラス内の指定されたメソッドを検索します メソッド findMethod(Class<?> clazz, String name) // 上記と同様に、追加のメソッド パラメータ タイプが検索条件として提供されます メソッド findMethod(Class<?> clazz, String name, Class<?>... paramTypes) // 継承されたメソッドを含むクラス内のすべてのメソッドを取得します Method[] getAllDeclaredMethods(Class<?>leafClass) // クラス内で指定されたコンストラクター メソッドを検索します コンストラクタ<T>accessibleConstructor(Class<T> clazz, Class<?>...parameterTypes) //quals() メソッドかどうか boolean isEqualsMethod(メソッドメソッド) // hashCode() メソッドかどうか ブール値 isHashCodeMethod(メソッドメソッド) // toString() メソッドかどうか boolean isToStringMethod(メソッドメソッド) // Object クラスから継承されたメソッドかどうか boolean isObjectMethod(メソッドメソッド) // メソッドが指定された例外をスローするように宣言されているかどうかを確認します boolean destroysException(メソッド メソッド、クラス<?> 例外タイプ)
実行方法
//実行方法 オブジェクト invokeMethod(メソッド メソッド, オブジェクト ターゲット) // 上記と同様に、メソッド パラメータを指定します Object invokeMethod(メソッド メソッド, オブジェクト ターゲット, オブジェクト... 引数) // Java 権限チェックをキャンセルします。その後プライベート メソッドを実行するには void makeAccessible(メソッドメソッド) // Java 権限チェックをキャンセルします。プライベート コンストラクターの後続の実行用 void makeAccessible(Constructor<?> ctor)
フィールドの取得
// クラス内の指定された属性を検索します フィールド findField(Class<?> clazz, String name) // 上記と同様に、追加の属性タイプが提供されます フィールド findField(Class<?> clazz, String name, Class<?> type) // 「public static Final」属性かどうか ブール値 isPublicStaticFinal(フィールドフィールド)
フィールドを設定する
// ターゲット オブジェクトのフィールド属性値を取得します オブジェクト getField(フィールド フィールド, オブジェクト ターゲット) // ターゲット オブジェクトのフィールド属性値を設定します。値は value です。 void setField(フィールドフィールド, オブジェクトターゲット, オブジェクト値) // 類似したオブジェクトの属性の同等の割り当て voidshallowCopyFieldState(Object src, Object dest) // Java の権限制御チェックをキャンセルします。その後、プライベート属性の読み取りと書き込みを行うために void makeAccessible(フィールドフィールド) // クラスの各プロパティに対してコールバックを実行 void doWithFields(Class<?> clazz, ReflectionUtils.FieldCallback fc) // 上記と同じですが、属性フィルタリング関数が追加されています。 void doWithFields(Class<?> clazz, ReflectionUtils.FieldCallback fc, ReflectionUtils.FieldFilter ff) // 上記と同じですが、継承されたプロパティは除外されます void doWithLocalFields(Class<?> clazz, ReflectionUtils.FieldCallback fc)
Spring Bootの勉強メモ
AopUtils
エージェントのタイプを決定する
// Spring プロキシ オブジェクトかどうかを判断します ブール値 isAopProxy() // JDK 動的プロキシ オブジェクトかどうかを判断します isJdkDynamicProxy() // CGLIB プロキシ オブジェクトかどうかを判断します ブール値 isCglibProxy()
プロキシオブジェクトのクラスを取得します。
// プロキシ ターゲット クラスを取得します クラス<?> getTargetClass()
Aopコンテキスト
現在のオブジェクトのプロキシ オブジェクトを取得します
オブジェクト currentProxy()