파란하늘의 지식창고
Published 2018. 11. 14. 17:31
자주 쓰는 spring util 기록 Study/Java
반응형

자주 쓰는 유틸 목록 기록

계속 업데이트 할 예정

유틸은 알파벳 순서로 정렬

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);
	}
}

 

반응형
profile

파란하늘의 지식창고

@Bluesky_

내용이 유익했다면 광고 배너를 클릭 해주세요