본문 바로가기

SpringFramework Core - I. IoC 컨테이너/4. 의존성

4.2.1. Straight Values (원시 타입, String 등등)

원문: https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-value-element

 

 

<property/> 요소의 'value' 속성은 사람이 읽을 수 있는 문자열 형태로 프로퍼티나 생성자 인자를 특정한다. 스프링의 변환 서비스는 이러한 값들을 String에서 프로퍼티나 인자의 실제 타입으로 변환해주는 데 사용된다. 다음 예시는 다양한 값들이 세팅되어 있는 것을 보여준다.

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <!-- setDriverClassName(String) 호출의 결과들 -->
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/mydb" />
    <property name="username" value="root" />
    <property name="password" value="masterkaoli" />
</bean>

다음 예시는 더 풍부한 XML 설정을 위해 p-namespace를 사용한다.

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        https://www.springframework.org/schema/beans/spring-beans.xsd">
                        
    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
        p:driverClassName="com.mysql.jdbc.Driver"
        p:url="jdbc:mysql://localhost:3306/mydb"
        p:username="root"
        p:password="masterkaoli" />
        
</beans>

위의 XML은 더 간결하다. 하지만 bean 정의를 생성할때 자동으로 프로퍼티를 완성시켜주는 IDE를 사용하지 않는 한, 오타는 설계 시점이 아닌 런타임에 밝혀진다. 그런 IDE들의 도움은 매우 유용하다.

 

다음과 같이 'java.util.Properties' 인스턴스를 설정할 수도 있다.

<bean id="mappings" class="org.springframework.context.support.PropertySourcePlaceholderConfigurer">

    <!-- java.util.Properties로 타입화 -->
    <property name="properties">
        <value>
            jdbc.driver.className=com.mysql.jdbc.Driver
            jdbc.url=jdbc:mysql://localhost:3306/mydb
        </value>
    </property>
</bean>

스프링 컨테이너는 자바빈의 PropertyEditor 메커니즘을 사용하여 <value/> 요소 안의 텍스트를 java.util.Properties 인스턴스로 변환한다. 이것은 훌륭한 지름길이며, 스프링 제작진이 수많은 value 속성 스타일들 중에서 사용하기를 선호하는 몇 안되는 <value/> 요소이기도 하다.