본문 바로가기

SPRING

직접 의존 주입 <property> <constructor-args>

xml 파일에서 <bean> 태그를 활용한 의존 주입 방법에는

setter를 이용한 방법 / 생성자를 이용한 방법이 있다.

 

아래 예제를 확인해보자.

 

 


 

1) 스프링에서 객체를 생성하는 방법 

- new 하는 것이 아니고, xml <bean> 태그 안에서 작업이 이루어진다

<bean id="test" class="basic2.SpringTest" />

// 사용하고자 하는 SpringTest 객체(=클래스)를 test라는 이름으로 저장

// new 하려고 하는 클래스명을 class에 적고, id는 참조변수명과 동일해도 문제 없는 듯

// 메인에서 호출할 때 

SpringTest test = ct.getBean("test", SpringTest.class);
test.hello();




2) 서로 관련이 있는 클래스들에 의존성 주입하기 - 생성자 사용

-xml에다가 의존성을 등록해놓으면, 메인 메소드에서 의존이 연결된 대표적인 클래스만 불러내도

 문제없이 연결된 모든 클래스의 메서드가 실행됨

<!-- Hotel 객체와 의존 객체들의 빈 등록 및 의존성 주입 설정 -->

<bean id="chef" class="com.spring.basic2.ex01.Chef" />

 

<!-- 생성자를 통한 의존성 주입 -->

<bean id="res" class="com.spring.basic2.ex01.Restaurant">

<constructor-arg ref="chef" /> // ref = 생성자 인수의 값은 "chef(=id값이 들어감)"

</bean>

 

<bean id="hotel" class="com.spring.basic2.ex01.Hotel">

<constructor-arg ref="res" /> // 얘는 res꺼를 가져오니까 자동으로 chef꺼도 갖게됨

</bean>

 

**생성자를 통한 의존성 주입은 객체 생성만 가능하게 한다 / 값 주입은 안된다

**생성자를 통한 의존성 주입 코드에는 의존성이 필요한 클래스마다 생성자들이 들어간다. 

  (매개변수에는 필요로 하는 인자를 받는다)  왜냐하면 생성자를 통한 의존성 주입 방법이니까!

   반대로, setter를 통한 의존성 주입 방법에서는 setter 메서드가 들어간다.

 

3-1) 서로 관련이 있는 클래스들에 의존성 주입하기 - setter 사용 (값 주입)

-setter로 의존성을 주입하는 경우에는, 각각 클래스에 set,get 메서드를 설정해주는 것이 필수 사항

 (이해가 안간다면 코드를 쭉 보고 이해해봐)

 

<bean id="db1" class="com.spring.basic2.ex02.DataBaseInfo"> // id는 내가 원하는 것으로 (객체명)

<property name="url" value="jdbc:oracle:thin@localhost:1521:xe" />

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

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

// name에는 멤버변수명, value에는 내가 넣고 싶은 값 셋팅

</bean>

 

//또 다른 객체 추가해보기 (의미두지마)

<bean id="db2" class="com.spring.basic2.ex02.DataBaseInfo"> // id는 내가 원하는 것으로 (객체명)

<property name="url" value="jdbc:mysql://localhost:3306/spring" /> 

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

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

</bean>



3-2) 서로 관련이 있는 클래스들에 의존성 주입하기 - setter 사용 (객체 주입 - 생성자와 비슷한 느낌)

-서로를 꼭 필요로 하는 클래스들끼리의 의존성을 만들어줌

-모든 클래스의 값들을 가지고 있는 꼭대기? 클래스의 메서드를 메인에서 호출하면 다른 클래스의 내용들까지 주르륵 이어서 출력됨. 왜냐? xml에서 의존성을 맺어주는 코드를 적어줬거든.

대신에 클래스에 꼭 set.get이 존재해야해!!!!

 

<!-- setter를 통한 객체 주입 방법 (생성자와 같은 개념이다) -->

<!-- MemberDAO는 DataBaseInfo 클래스를 꼭! 필요로 한다 (의존관계다) -->

<bean id="dao" class="com.spring.basic2.ex02.MemberDAO">

<property name="dbInfo" ref="db2"></property>

// name에는 멤버변수명, ref에는 필요로 하는 값들이 담긴 객체명(=bean의 id값)

</bean>