https://www.inflearn.com/course/spring-framework_core
ㅁ Resource / Validation
ㅇ Resource 추상화
- Applicationcontext를 xml 이름으로 호출할때, Resource의 getResource로 classpath 경로 호출하는것이다. (Resource로 변환됨)
- ServletContextResource를 구현체중 가장 많이 쓰게 됨, 기본값임
> 웹 애플리케이션 루트에서 상대 경로로 리소스를 찾는다.
> 스프링 부트에 내장된 톰캣은 context path가 지정되어있지않음
- Resource를 호출할때 접두어를 사용하는걸 추천한다. (좀 더 명시적임 , :classpath or file://)
ㅇ Validation 추상화
- validation이란? java ee 표준 스펙
- email, size, not null 등 bean 데이터를 검증 가능
- support랑 valid를 구현해야함
- validationutils를 통해 객체의 필드값에 대한 에러코드 설정 가능
- javax.validation.constraints 를 통해 구현된 validator를 가져다 쓸수 있다.
> maven에서 다운로드 가 안됨 ( 스프링 boot 2.5.2 사용)
- @size는 collection 사이즈 검증
- @Min @Max는 Integer 값 검증
ㅁ 데이터 바인딩
ㅇ 데이터 바인딩 추상화 : PropertyEditor
- 사용자의 입력값 ( 보통 문자열 ) 을 int, long, boolean, date 등으로 변환하여 객체에 입력함
- DataBinder 인터페이스가 있음
- PropertyEditor를 싱글톤으로 등록하면 안됨
> ThreadSafe 하지 않음
> bean으로 절~~대 등록하지 말것
> Thread Scope의 bean으로 만들어도 됨 ( 하나의 쓰레드 내에서만 유효한 Bean )
- Property Editor의 경우 구현이 복잡하고 어려움, Spring 3 부터 다른것 사용
ㅁ 데이터 바인딩 추상화: Converter와 Formatter
- PropertyEditor는 String과 Object 간의 관계만 변환함, 또 상태정보를 저장함
- Converter는 ConverterRegistry에 등록해서 사용 ( @Configuration 을 사용한 bean에서 설정)
> registry.addFormater , registry.addConverter
- Message 관련해서 locale 바탕으로 바꾸는게 formatter
- Thread Safe함, Bean으로 주입 가능
- DefaultFormattingConversionService는 Conversion Service와 Formatter Registry 역할을 함
- 스프링 부트에서는 DFConversionService를 상속한 WebConversionService를 빈으로 등록함
- Formatter와 Converter를 bean으로 등록하면 Service에서 자동으로 등록하여 사용함
- Formatter를 쓰는거를 추천함