8월 30, 2023

XML 파일을 통해 Spring Bean을 정의하고 구성하기 (property, ref, ID, class)

지난 포스팅에서 Spring을 통한 의존성 주입과 제어역전의 개념을 알아보았다.


Spring 의존성 주입(DI), DI container, 제어의 역전 (IoC) 한번에 이해하기 

 

Spring을 이용하여 객체를 구성하고 의존성을 연결하는 여러 가지 방법들 중 가장 일반적인 방법은 XML, 그리고 선언적 방법이 있다. 

 

이번 포스팅에서는 Spring을 이용하여 XML 파일에서 Bean을 정의하고 구성하는 방법을 알아보도록 하자.

 

1. Bean ID, Class

<bean id="testBean" class="com.springPractice.TestBean" />

Bean의 ID는 Spring container에서 식별할 수 있는 이름, class는 해당 Bean의 Full 경로를 의미한다. 위 예제에서는 ID가 testBean, 그리고 해당 Bean의 full path 즉 com.springPractice.TestBean이 해당 Bean의 전체경로이다.

Spring에서는 ID 속성을 사용하여 Bean 사이의 종속성을 지원할 수 있다.


 

2. Bean Property

Bean xml에서

<property name="" value =""/>

이런식으로 property 속성을 통해 setter method를 타고 인스턴스를 정의할 수 있다.

 

이렇게만 보면 이해하기가 어렵기 떄문에 예제를 통해 설명을 해보도록 하겠다.

 

public class Person {
	//Person Class의 instance 
    
    private String name;
    private int age;
    
    public void setName(String name){
    	this.name=name;
    }
    public void setAge(int age){
    	this.age=age;
    }
}

 

위와 같이 name과 age를 인스턴스로 가지고 있는 Person class에 setter method로 setName과 setAge가 존재한다고 가정해보자. 그러면 우리는 Spring의 xml 파일에 property name, value 속성을 사용해서 setter method를 사용하는 것과 동일한 효과를 얻을 수 있는 것이다. 

 

xml 파일에서 Tommy라는 이름을 가진 25살 사람을 만들어준다고 해보자. 원래였다면 setter 메소드를 사용하여 주입해주었겠지만 우리는 아래와 같이 작성할 수 있다.

 

<bean id="person" class="com.SpringPractice.person">
	<property name="name">
    	<value>Tommy</value>
    </property>
    <property name="age" value="25"/>
</bean>

 

즉 property name에는 instance의 이름, value에는 실제 set 하려는 값을 적어주면 된다.


 

3. ref 

Ref 특성은 Spring을 이용하여 의존성 주입을 할 때 사용된다. value 특성과 다른점은 무엇일까. vlaue 특성은 값 객체 속성이나 기본 형식의 데이터를 주입하기 위하여 사용되는 반면, ref의 경우 참조형으로 id 혹은 name을 가지는 bean을 생성자의 인자로 넘겨주겠다는 의미로 이해하면 된다. 

 

즉 예를 들어 Service.java라는 파일 안에 testDao instance가 있다면,

<bean id="Service">
  <property name ="testDao" ref="firstDao"/>
</bean>

 

위와 같이 testDao instance에 firstDao를 서비스로 의존성 주입한 것이라고 생각하면 된다. 


이런식으로 Spring에서 xml 파일을 이용하여 의존성을 주입하는 방법, 그리고 그 속성들에 대하여 알아보았다.