인터넷 강의를 듣고 공부한 내용을 포스팅합니다.
'윤재성의 스프링 프레임워크 개발자를 위한 실습을 통한 입문 과정' 이란 강의를 듣고 있습니다.
DI(의존성 주입)
의존성 주입은 Spring에서 중요하고 주요한 개념
bean객체를 생성 할 때 bean 객체가 관리할 값이나 객체를 주입하는 것
bean객체가 가질 기본 값을 자바 코드로 넣어주지 않고bean을 정의할 때 xml코드에서 정의함
실습(생략한 코드들은 다 만들어져있다고 가정)
데이터타입인 변수들
public class TestBean {
private int data1;
private double data2;
private String data3;
public TestBean() {
System.out.println("TestBean의 기본 생성자");
this.data1 = 0;
this.data2 = 0.0;
this.data3 = null;
}
public TestBean(int data1,double data2,String data3) {
System.out.println("TestBean의 생성자: 변수3개");
this.data1 = data1;
this.data2 = data2;
this.data3 =data3;
}
public void printData() {
System.out.printf("data1 : %d\n",data1);
System.out.printf("data2 : %f\n",data2);
System.out.printf("data3 : %s\n",data3);
}
}
위와 같은 클래스가 있을 때 Main에서
TestBean t5 = new TestBean(200,22.22,"안녕하세요");
t5.printData();
/*
결과
TestBean의 생성자: 변수3개
data1 : 200
data2 : 22.220000
data3 : 안녕하세요
*/
이런식으로 사용했었다. di개념을 적용시키면
<bean id="obj5" class="kr.co.softcampus.beans.TestBean"
lazy-init="true">
<constructor-arg value="200" type="int"/>
<constructor-arg value="22.22" type="double"/>
<constructor-arg value="안녕하세요" type="java.lang.String"/>
</bean>
TestBean obj5 = ctx.getBean("obj5",TestBean.class);
obj5.printData();
/*
TestBean의 생성자: 변수3개
data1 : 200
data2 : 22.220000
data3 : 안녕하세요
*/
위와 같이 <constructor-arg>태그에 넣어주면 type에 맞춰서 본인이 들어갈 것을 찾아 들어간다. 순서를 바꾸어도 가능
하지만 확실히 index를 정해주어서 넣어주는게 좋다.
<bean id="obj7" class="kr.co.softcampus.beans.TestBean"
lazy-init="true">
<constructor-arg index="1" value="22.22" type="double"/>
<constructor-arg index="0" value="300" type="int"/>
<constructor-arg index="2" value="반갑습니다." type="java.lang.String"/>
</bean>
결과는 같다.
클래스를 변수로 가짐
DataBean이라는 클래스를 만들어주고
<bean id="obj8" class="kr.co.softcampus.beans.TestBean2"
lazy-init="true">
<constructor-arg>
<bean class="kr.co.softcampus.beans.DataBean"/>
</constructor-arg>
<constructor-arg>
<bean class="kr.co.softcampus.beans.DataBean"/>
</constructor-arg>
</bean>
이렇게 넣어줄 수 있고
<bean id="data_bean" class="kr.co.softcampus.beans.DataBean" scope = "prototype"/>
<bean id = "obj9" class="kr.co.softcampus.beans.TestBean2"
lazy-init="true">
<constructor-arg ref = "data_bean"/>
<constructor-arg ref = "data_bean"/>
</bean>
이런식으로 bean객체를 생성한 뒤에 넣어줄 수도 있다.
끝!
'Spring' 카테고리의 다른 글
DI(Dependency Injection) Setter메서드를 통한 주입 (0) | 2021.07.17 |
---|---|
DI(Dependency Injection) 컬렉션 주입 (0) | 2021.07.17 |
빈 객체의 생명주기, BeanPostProcessor (0) | 2021.07.16 |
빈 객체 생성하기 (0) | 2021.07.15 |
IOC(Inversion Of Control) 컨테이너 (0) | 2021.07.14 |