Open gmelon opened 2 months ago
Spring 프레임워크에서 문자열을 Resource 타입으로 변환하는 작업은 Spring의 ResourceEditor
에 의해 수행됩니다. 이 변환 작업이 이루어지는 과정을 자세히 살펴보면 다음과 같습니다:
PropertyEditorRegistry:
Spring은 프로퍼티 값을 변환하기 위해 PropertyEditorRegistry
를 사용합니다. 이는 다양한 PropertyEditor
들을 등록하고 관리합니다.
ResourceEditor:
ResourceEditor
는 PropertyEditor
의 구현체로, 문자열을 Resource
타입으로 변환합니다. 이 에디터는 Resource
를 로드할 수 있는 문자열 표현(예: 파일 경로, URL 등)을 처리할 수 있습니다.
BeanWrapper:
Spring의 BeanWrapper
는 JavaBean의 프로퍼티를 설정하고 읽는 데 사용됩니다. BeanWrapper
는 내부적으로 PropertyEditorRegistry
를 사용하여 프로퍼티 값을 변환합니다.
ConversionService:
Spring 3.0 이후로는 ConversionService
를 사용하여 타입 변환을 보다 유연하게 처리합니다. ConversionService
는 Converter
인터페이스를 통해 다양한 타입 변환기를 등록하고 관리합니다. Resource
변환은 ResourceEditor
와 함께 ConversionService
에서도 처리될 수 있습니다.
이러한 변환 작업이 이루어지는 순서는 다음과 같습니다:
빈 정의: XML 또는 자바 설정 파일에서 빈을 정의하고, 프로퍼티에 문자열 값을 설정합니다.
<bean id="myBean" class="com.example.MyBean">
<property name="resource" value="classpath:myfile.txt"/>
</bean>
빈 생성:
Spring 컨테이너가 빈을 생성하고 프로퍼티를 설정할 때, BeanWrapper
를 사용하여 프로퍼티 값을 설정합니다.
타입 변환:
BeanWrapper
는 프로퍼티 값이 설정될 때 PropertyEditorRegistry
또는 ConversionService
를 사용하여 문자열을 Resource
타입으로 변환합니다. 이 과정에서 ResourceEditor
가 사용됩니다.
프로퍼티 설정:
변환된 Resource
객체가 빈의 필드에 설정됩니다.
따라서, 문자열에서 Resource
로의 변환 작업은 Spring의 ResourceEditor
또는 ConversionService
에 의해 자동으로 수행됩니다. 이 과정은 Spring의 타입 변환 메커니즘에 의해 처리되며, 사용자는 이를 명시적으로 처리할 필요가 없습니다.
p.614를 보면, Resource 타입의 필드를 갖는 빈에 property 설정으로 문자열을 넣어주는 것 만으로도 문자열이 아닌 Resource 가 생성되어 필드로 등록되는 것을 알 수 있습니다.
여기서 문자열 -> Resource 변환 작업은 어디서 누구에 의해 이뤄지는 걸까요?