티스토리 뷰


  1   Bean 생성 및 생성자를 통한 의존관계 설정



 스프링은 객체를 담고있는 컨테이너이다. 컨테이너에 저장 될 빈객체와 각 빈객체들간의 의존관계를 XML 파일을 통하여 설정하게 된다.




  2   Bean 생성 및 컨테이너를 통한 Bean 사용



 스프링 컨테이너가 관리할 빈객체를 생성하기 위해서는 <bean>태그를 사용하면 된다.


<bean>태그의 class 속성은 생성할 빈 객체의 패키지를 포함한 클래스 이름이며, id속성은 스프링 컨테이너에서 생성된 객체를 구분하는데 사용되는 식별값으로 사용된다. id속성을 name속성으로 바꿔서 사용해도 된다.


 id속성은 XML의 구성요소 이기 때문에 id속성을 사용할 경우 동일한 id값을 가지는 <bean>태그를 설정하면 애러가 발생하며, id속성은 특수분자를 포함할 수 없는 반면에 name 속성은 특수문자를 이름으로 사용할 수 있다.


 <bean>태그를 사용할 때 주의할 점은 생성자와 관련된 정보(<constructor-arg>태그)를 명시하지 않았다면 매개변수가 없는 기본 생성자를 이용하여 객체를 생성하게 된다. 따라서 빈으로 사용할 클래스에 인자를 갖는 생성자를 정의 했다면 기본생성자도 함께 정의해 주어야 한다.




  3   생성자를 통한 의존관계 설정



 생성자 방식은 의존하는 개체를 생성자를 통해서 전달 받게 된다.


다음과 같은 의존관계가 있을때 SpringTest 클래스의 필드로 BoardDao클래스가 존재한다. 이러한 BoardDao클래스를 생성자를 통해 전달 받게 될때의 빈의 설정방식은 밑의 <constructor-arg>태그를 사용하게 되며 코드는 다음과 같다.


위 코드에서 <ref>태그는 레퍼런스를 의미하며, 설정의 의미는 SpringTest클래스의 생성자에 식별값이 "boardDao"인 빈객체를 전달한다는 것을 의미한다. 위의 코드에서 <ref>태그를 사용하는 대신 <constructor-arg>태그의 ref속성을 사용(주석)할 수도 있다.


생성자가 전달받는 값이 원시형태(int, double등)같은 기본데이터 타입이거나 String 타입이라면 <ref>태그 대신에 <value>태그를 사용하여 값을 지정한다. 또한 <ref>태그의 경우와 마찬가지로 <constructor-arg>태그의 value 속성을 이용해서 생성자에 전달(주석)할 값을 지정할 수 도 있다.


생성자가 전달받는 파라미터가 2개 이상인 경우에는 파라미터의 수만큼 <constructor-arg>태그를 설정해주어야 한다.

또한 스프링은 <constructor-arg>태그를 통해 전달된 값의 타임과 가장 근접한 타입의 파라미터를 갖는 생성자를 이용하여 객체를 생성하게 된다. 


  위의 코드와 같이 생성자가 3개인 클래스에서 스프링 가장 근접한한 데이터형을 가진 생성자를 사용하게 된다. 스프링은 기본적으로 <value>태그의 값을 String으로 인식하고, 따라서 파라미터의 데이터 타입이 모두 String인 두번째 생성자로 객체를 생성하게 된다.  만약 파라미터 타입이 (String, String)인 생성자가 존재 하지 않는다면 <value>태그에 전달된 값에 따라 알맞은 데이터 타입을 선택하게 된다. 


  따라서, 1000이 정수 타입에 해당되기 때문에 파라미터 타입이 (String, int)인 생성자를 사용하게 된다. 여기서 만약 파라미터의 타입이 (String, long)인 생성자를 사용하려면 <value>태그에 type속성으로 "long"을 선언해주면 된다.



댓글