자주 쓰는 유틸 목록 기록
계속 업데이트 할 예정
유틸은 알파벳 순서로 정렬
org.springframework.beans.BeanUtils
<T> T instantiateClass(Class<T> clazz)
해당 class 로 Object 생성
A a = BeanUtils.instantiateClass(A.class);
void copyProperties(Object source, Object target)
source의 속성을 target으로 복사
확장한 class에서 기존 class의 값을 복사해서 쓰거나 동일한 속성값이 있는 두 클래스간 값 복사 시 유용함
org.springframework.core.GenericTypeResolver
Class<?>[] resolveTypeArguments(Class<?> clazz, Class<?> genericIfc)
generic type을 확인하는 helper class
대상 클래스 또는 그 상위 클래스 중 genericIfc에 해당하는 generic interface 또는 superclass 가 있으면 해당 type argument 를 반환함
publc class A<SomeClass, SomeClass2> {
}
public class B extends A {
}
// SomeClass, SomeClass2가 반환됨
Class<?>[] classes = GenericTypeResolver.resolveTypeArguments(B.class, A.class);
org.springframework.util.ReflectionUtils
Field findField(Class<?> clazz, String name)
해당 클래스에서 name에 해당하는 Field 정보 조회
void makeAccessible(Field field)
해당 필드를 접근 가능하게 변경
Object getField(Field field, @Nullable Object target)
해당 필드의 정보 조회
void setField(Field field, @Nullable Object target, @Nullable Object value)
해당 필드 수정
접근 권한이 없는 필드에 대해 강제로 접근을 하려는 경우 위 3개의 메소드를 호출하여 접근 가능
public class SomeClass {
private String aField;
}
SomeClass someClassObj = new SomeClass();
Field field = ReflectionUtils.findField(SomeClass .class, "aField");
ReflectionUtils.makeAccessible(field);
String aField = (String) ReflectionUtils.getField(field, someClassObj); // 해당 필드의 값 접근
ReflectionUtils.setField(aField, someClassObj, "변경할 값"); // 해당 필드의 값 수정
org.springframework.util.ClassUtils
boolean isPresent(String className, @Nullable ClassLoader classLoader)
해당 클래스가 있는지 확인 ([class].class.getName() 을 쓰면 안됨 - 없는 경우 에러 발생함)
boolean isPresent = ClassUtils.isPresent("org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter", null);
org.springframework.util.StringUtils
boolean isEmpty(@Nullable Object str);
String null 과 empty 체크
StringUtils.isEmpty(stringValue);
boolean hasText(@Nullable String str);
null과 empty와 공백이 아닌 문자가 하나 이상 있는지 체크
StringUtils.hasText(stringValue);
boolean containsWhitespace(@Nullable String str)
공백이 있는지 여부 확인
String trimWhitespace(String str)
앞뒤 공백 제거
String trimAllWhitespace(String str)
모든 공백 제거
String trimLeadingWhitespace(String str)
선행 공백 제거
String trimTrailingWhitespace(String str)
후행 공백 제거
boolean startsWithIgnoreCase(@Nullable String str, @Nullable String prefix)
대소문자 구분없이 해당 prefix로 시작하는지 여부
boolean endsWithIgnoreCase(@Nullable String str, @Nullable String suffix)
대소문자 구분없이 해당 suffix로 끝나는지 여부
String replace(String inString, String oldPattern, @Nullable String newPattern)
해당하는 문자열 모두 변경. newPattern이 null인 경우 변경하지 않음
String delete(String inString, String pattern)
해당하는 문자열 모두 삭제
String quote(@Nullable String str)
문자열 앞뒤로 ' 를 붙여서 반환
Object quoteIfString(@Nullable Object obj)
매개변수가 String 객체인 경우 quote 처리하여 반환
String unqualify(String qualifiedName)
'.' 문자열을 기준으로 마지막 문자열 반환
StringUtils.unqualify("this.name.is.qualified"); // "qualified" 문자열 반환
String unqualify(String qualifiedName, char separator)
설정된 구분자 기준으로 마지막 문자열 반환
StringUtils.unqualify("this:name:is:qualified", ":"); // "qualified" 문자열 반환
String capitalize(String str)
첫 글자를 대문자로 변경
String uncapitalize(String str)
첫 글자를 소문자로 변경
String getFilename(@Nullable String path)
path 경로에서 파일 이름을 반환 (마지막 문자열을 반환)
StringUtils.getFilename("mypath/myfile.txt"); // "myfile.txt" 문자열 반환
String getFilenameExtension(@Nullable String path)
파일의 확장자 반환
StringUtils.getFilenameExtension("mypath/myfile.txt"); // "txt" 문자열 반환
String stripFilenameExtension(String path)
파일의 확장자를 빼고 반환
StringUtils.stripFilenameExtension("mypath/myfile.txt"); // "mypath/myfile" 문자열 반환
String applyRelativePath(String path, String relativePath)
기존 패스에 상대 경로 추가
StringUtils.applyRelativePath("a/b", "c")); // "a/c"
StringUtils.applyRelativePath("a/b/", "c")); // "a/b/c"
StringUtils.applyRelativePath("a/b", "/c")); // "a/c"
StringUtils.applyRelativePath("a/b/", "/c")); // "a/b/c"
String[] commaDelimitedListToStringArray(@Nullable String str)
comma ',' 기준으로 끊어서 array를 반환
String[] delimitedListToStringArray(@Nullable String str, @Nullable String delimiter)
comma가 아닌 다른 기준으로도 끊을 수 있음
String[] delimitedListToStringArray(@Nullable String str, @Nullable String delimiter, @Nullable String charsToDelete)
끊으면서 특정 문자열 삭제도 지원
String targetValue = "a,b,c,d,e";
String[] result = StringUtils.commaDelimitedListToStringArray(targetValue); // ["a","b","c","d","e"] 반환
org.springframework.util.TypeUtils
boolean isAssignable(Type lhsType, Type rhsType);
오른쪽에 있는 타입이 왼쪽에 있는 타입의 하위 타입인지 체크
public class A {
}
public class B extends A {
}
// true 반환
TypeUtils.isAssignable(A.class, B.class);
org.springframework.validation.ValidationUtils
void invokeValidator(Validator validator, @Nullable Object obj, Errors errors, @Nullable Object... validationHints)
hibernate validator를 직접 체크할 때 사용
@Autowired
private static Validator validator;
@SneakyThrows
public static void validate(Object object, Object... validationHints) {
BeanPropertyBindingResult beanPropertyBindingResult = new BeanPropertyBindingResult(object, StringUtils.uncapitalize(object.getClass().getSimpleName()));
ValidationUtils.invokeValidator(validator, object, beanPropertyBindingResult, validationHints);
if (beanPropertyBindingResult.hasErrors()) {
throw new BindException(beanPropertyBindingResult);
}
}
'Study > Java' 카테고리의 다른 글
JDK 11 New Features (0) | 2018.11.22 |
---|---|
JDK 10 New Features (0) | 2018.11.21 |
JDK 9 New Features (0) | 2018.11.21 |
JCP JSR JEP에 대해 (0) | 2018.11.20 |
RestTemplate list 반환하기 (0) | 2018.11.16 |
java Exception은 어떻게 사용하는게 좋을까? (0) | 2018.11.12 |
Spring Boot 2.1.0 Release (0) | 2018.10.31 |
Spring Boot 2.0 PropertyMapper 사용하기 (0) | 2018.10.24 |
Spring Boot 2.0에서 Deprecated 된 RelaxedPropertyResolver 변경하기 (0) | 2018.10.23 |
Spring Boot 2.0 마일스톤 별 변경 사항 (0) | 2018.10.10 |