SSAFY11th-book-study / book-study

SSAFY 11기 6반의 '토비의 스프링 스터디'
0 stars 0 forks source link

[7.3] Resource 와 빈 xml property 설정 #84

Open gmelon opened 5 months ago

gmelon commented 5 months ago

p.614를 보면, Resource 타입의 필드를 갖는 빈에 property 설정으로 문자열을 넣어주는 것 만으로도 문자열이 아닌 Resource 가 생성되어 필드로 등록되는 것을 알 수 있습니다.

여기서 문자열 -> Resource 변환 작업은 어디서 누구에 의해 이뤄지는 걸까요?

gmelon commented 5 months ago

Spring 프레임워크에서 문자열을 Resource 타입으로 변환하는 작업은 Spring의 ResourceEditor에 의해 수행됩니다. 이 변환 작업이 이루어지는 과정을 자세히 살펴보면 다음과 같습니다:

  1. PropertyEditorRegistry: Spring은 프로퍼티 값을 변환하기 위해 PropertyEditorRegistry를 사용합니다. 이는 다양한 PropertyEditor들을 등록하고 관리합니다.

  2. ResourceEditor: ResourceEditorPropertyEditor의 구현체로, 문자열을 Resource 타입으로 변환합니다. 이 에디터는 Resource를 로드할 수 있는 문자열 표현(예: 파일 경로, URL 등)을 처리할 수 있습니다.

  3. BeanWrapper: Spring의 BeanWrapper는 JavaBean의 프로퍼티를 설정하고 읽는 데 사용됩니다. BeanWrapper는 내부적으로 PropertyEditorRegistry를 사용하여 프로퍼티 값을 변환합니다.

  4. ConversionService: Spring 3.0 이후로는 ConversionService를 사용하여 타입 변환을 보다 유연하게 처리합니다. ConversionServiceConverter 인터페이스를 통해 다양한 타입 변환기를 등록하고 관리합니다. Resource 변환은 ResourceEditor와 함께 ConversionService에서도 처리될 수 있습니다.

이러한 변환 작업이 이루어지는 순서는 다음과 같습니다:

  1. 빈 정의: XML 또는 자바 설정 파일에서 빈을 정의하고, 프로퍼티에 문자열 값을 설정합니다.

    <bean id="myBean" class="com.example.MyBean">
       <property name="resource" value="classpath:myfile.txt"/>
    </bean>
  2. 빈 생성: Spring 컨테이너가 빈을 생성하고 프로퍼티를 설정할 때, BeanWrapper를 사용하여 프로퍼티 값을 설정합니다.

  3. 타입 변환: BeanWrapper는 프로퍼티 값이 설정될 때 PropertyEditorRegistry 또는 ConversionService를 사용하여 문자열을 Resource 타입으로 변환합니다. 이 과정에서 ResourceEditor가 사용됩니다.

  4. 프로퍼티 설정: 변환된 Resource 객체가 빈의 필드에 설정됩니다.

따라서, 문자열에서 Resource로의 변환 작업은 Spring의 ResourceEditor 또는 ConversionService에 의해 자동으로 수행됩니다. 이 과정은 Spring의 타입 변환 메커니즘에 의해 처리되며, 사용자는 이를 명시적으로 처리할 필요가 없습니다.

hj-k66 commented 5 months ago

https://blog.naver.com/roropoly1/221161747292

gmelon commented 5 months ago

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/PropertyEditorRegistry.html