SPRING

DI XML / 의존 관계 설정 1 (생성자 방식)

nang. 2019. 3. 18. 23:47
반응형
SMALL

# Bean 객체 획득


ApplicationContext ctx = new ClassPathXmlApplicationContext(
"com/springinaction/springidol/spring-idol.xml");
//이게 컨테이너를 생성하는 코드야
//컨테이너로부터 특정 bean 객체의 참조 정보를 가져옴
//첫번째 방법
//id로만 가져오면 Object 타입으로 변환된다. 따라서 타입캐스팅 꼭 해줘야한다.
Performer performer = (Performer) ctx.getBean("duke");
//두번째 방법
//타입을 지정하기때문에 타입캐스팅 필요 없다.
Performer performer2 = ctx.getBean("duke", Performer.class);
// 두가지 방법의 결과는 같음
// Performer는 인터페이스인데 타입을 구현된 클래스로 쓰는게 아니고 인터페이스로 쓰는 이유는
// 더 유연하게 사용이 가능하기 때문






# 의존 관계 설정 1 - 생성자 방식 <constructor-arg>
- Bean의 생성자를 통해 의존 객체 주입
- 이용가능한 생성자가 bean 클래스에 정의되어 존재해야함



* 효과
- 컨테이너는 의존하는 빈 객체(A)를 먼저 생성
- 의존 객체(불려지는 객체)나 값의 타입을 이용하고 적절한 생성자를 찾아 실행함 (value, ref를 보고)
- 생성자 호출 시 의존객체나 값을 인자로 전달

- <value>를 통해 전달되는 값은 기본적으로 String 타입으로 간주
- type 속성을 이용하여 다른 타입으로 변환 가능
<constructor-arg value="10" type="int" />










# c 네임스페이스를 이용한 설정 = <constructor-arg> 쓴거랑 같은 효과

- 속성에 쓰는 것이며 c 접두사를 붙인다.
- 속성이니까 파라미터 순서 신경 안써도 된다.
- <beans> 안에 c 접두사 선언
xmlns:c="http://springframework.org/schema/c"
- 클래스 내의 생성자에 선언해놓은 변수 이름 그대로 가져와서 쓴다.
public Instrumentalist(String song, Instrument instrument) {} 였으니까
<bean id="kenny" class="com.springincation.springidol.Instrumentalist"
c:song="Jingle Bell"
c:instrument-ref="saxophone" />
<!-- 클래스 내 생성자에 선언된 변수 이름 써주기! -->

- 단, 값이 아닌 객체를 주입하는 경우(constructor-arg의 ref)는 변수이름-ref를 붙여야한다!


- 파라미터 순서대로 할 수도 있다.

c:_0="Jingle Bell"

c:_1-ref="saxophone" 이렇게 _숫자 해서 표현한다.

여기서도 객체를 주입하는 경우는 -ref를 꼭 붙여야한다.






반응형
LIST