Back-End/Spring

[Spring] 값(Value) 주입 설정 방법 - XML Config

유자맛바나나 2021. 7. 24. 02:24

 값(Value) 주입 설정 방법

2021.07.17 - [Back-End/Spring] - [Spring] 의존성 주입(DI) 설정 방법 - XML형식 Config 에서 의존 클래스(객체)를 주입하는 방법을 살펴보았다.

여기에 더해 Spring은 Bean Configuration을 이용해 Int, String과 같은 '값(Value)'를 주입하는 것도 지원하니 방법을 알아본다

 

1) Spring Bean 등록

 ElectricMotor (Bean으로 등록될 Class)

package com.test.di;

public interface PowerUnit {
    void printMaxSpeedLimit();
}

public class ElectricMotor implements PowerUnit {
    private int maxLimitSpeed;

    public ElectricMotor(int maxLimitSpeed) {
        this.maxLimitSpeed = maxLimitSpeed;
    }
    
    @Override
    public void printMaxLimitSpeed() {
        System.out.println(String.format("Max Limit Speed: %d", this.maxLimitSpeed));
    }
}
  • IoC 컨테이너에 Bean으로 등록될 Class
  • 생성자로 maxLimitSpeed를 주입 받은 뒤 printMaxLimitSpeed() 메서드를 통해 값이 잘 들어왔는지 확인할 예정이다

SpringConfig.xml (xml 형식의 Spring Bean Configuration)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="electricMotorBean" class="com.test.di.ElectricMotor">
        <constructor-arg name="maxLimitSpeed" type="int" value="300"/>
    </bean>
</beans>
  • <bean> 태그 id 속성: Bean의 구분자로 "electricMotorBean" 설정
  • <constructor-arg>: 생성자로 주입 받을 것이므로 constructor-arg 태그 사용
    • name 속성
      name 속성의 값은 생성자에서 정의한 parameter 명과 일치해야 함. 즉, ElectricMotor의 생성자는 maxLimitSpeed를 parameter로 받고 있으므로 name="maxLimitSpeed"를 입력한다.
    • type 속성
      parameter의 타입을 입력한다. parameter maxLimitSpeed의 타입은 int 이므로 type="int"를 입력한다
      참고로 type은 생략이 가능한데, 동일한 parameter 이름을 사용하지만 타입이 다른 생성자가 존재한다면 name만으로 구분할 수 없어 type을 명시하는게 안전하다.
    • value 속성
      값 형식 주입은 <value> 속성으로 지정할 수 있다. (객체 주입은 <ref> 속성)
      value="300"을 입력한 것은 maxLimitSpeed에 300을 주입하겠다는 뜻이다
  • Setter 형식의 주입을 사용하고 싶다면 <constructor-arg> 대신 <property> 태그를 사용하면 된다

 

2) IoC 컨테이너 사용(ClassPathxmlApplicationContenxt)

public void client() {

    ApplicationContext context = new ClassPathXmlApplicationContext("./SpringConfig.xml");

    ElectricMotor electricMotorBean1 = (ElectricMotor) context.getBean("electricMotorBean");
    System.out.println("id 속성으로 Bean을 꺼내는 방식");
    electricMotorBean1.printMaxSpeedLimit();

    ElectricMotor electricMotorBean2 = context.getBean(ElectricMotor.class);
    System.out.println("자료형으로 Bean을 꺼내는 방식");
    electricMotorBean2.printMaxSpeedLimit();
}

실행 결과