★ DI (Dependency Injection)
스프링의 핵심 개념
객체사이의 의존 관계를 자기 자신이 아닌 외부에 의해서 설정된다는 개념이다
스프링에서는 설정파일을 사용하여 손쉽게 객체간의 의존관계를 설정하기에 스프링을 DI컨테이너라고 부르기도 한다.
DI 컨테이너는 어떤 클래스가 필요로 하는 인스턴스를 자동으로 생성, 취득하여 연결시켜주는 역활을 한다.
DI 컨테이너가 인스턴스를 생성하도록 하려면 프로그램 소스 내부에서 new 로 직접 생성하지 않고 설정파일에서 필요로 하는 클래스의 정보를 설정해주어야한다.
스프링은 각 클래스간의 의존관계를 관리하기 위한 방법
- Constructor Injection
- Setter Injection
★ Constructor Injection
: 생성자를 통해서 의존 관계를 연결시키는 것을 말한다.
: 생성자를 통해서 의존 관계를 연결하기 위해서는 XML 설정 파일에서 <bean>요소의 하위요소로
<constructor-arg>를 추가해야 한다.
1. 객체를 전달할 경우에는 ref요소를 사용
[Foo.java]
public class Foo {
private Bar bar;
public Foo(Bar bar){
this.bar = bar;
}
}
[applicationContext.xml]
<bean id="foo" class="Foo">
<constructor-arg>
<ref bean="bar" />
</constructor-arg>
</bean>
<bean id="bar" class="Bar" />
2. 전달인자가 2개이상인 경우
기본데이터 타입일 경우에는 <value>요소를 사용하여 의존관계를 연결시키기 위한 값을 지정
[Foo.java]
public class Foo {
public Foo(int a, String b){...}
}
[applicationContext.xml]
<bean id="foo" class="Foo">
<constructor-arg index="1" value="Hello" />
<constructor-arg index="0">
<value>25</value>
</constructor-arg>
</bean>
----------------------------------------------------------------
type 속성을 이용하여 지정
[applicationContext.xml]
<bean id="foo" class="Foo">
<constructor-arg type="int" value="25" />
<constructor-arg type="java.lang.String" value="Hello" />
</bean>
★ Setter Injection
: setter메소드를 이용하여 의존 관계를 연결시키는 것을 말한다.
: <property>요소의 name 속성을 이용하여 값의 의존 관계를 연결시킬 대상이 되는 필드값을 지정한다
[Foo.java]
public class Foo {
private Bar bar;
public void setBar(Bar bar){
this.bar = bar;
}
}
[applicationContext.xml]
<bean id="foo" class="Foo">
<property name="bar" ref="bar"></property>
</bean>
<bean id="bar" class="Bar" />
[실습]
Project : Chapter02
Project : Chapter02_SpringMaven
Project : Chapter02
Package : sample01
Interface : MessageBean.java
Class : MessageBeanImpl.java
HelloSpring.java - main()
src : applicationContext.xml
[문제 1]
Project : Chapter02
Package : sample02
Interface : Calc.java
추상Method : public void calculate();
Class : HelloSpring - main()
CalcAdd.java
CalcMul.java
[실행결과]
25 + 36 = xx
→ xml에서 CalcAdd를 빈(add)으로 Constructor Injection
25 * 36 = xx
→ xml에서 CalcMul를 빈(mul)으로 Setter Injection
-----------------------------------------
[문제 2]
Project : Chapter02
Package : sample03
Field : name, kor, eng, math, tot, avg
Interface : SungJuk.java
추상Method : public void calcTot();//총점계산
public void calcAvg();//평균계산
public void display();//출력
public void modify();//수정
Class : HelloSpring - main()
SungJukImpl.java
SungJukDTO.java
Constructor Injection를 이용하세요
[실행결과]
이름 국어 영어 수학 총점 평균
홍길동 97 100 95 xxx xx.xx
////////////////////////////////////////////////////
→ 수정하시오 (Setter Injection 이용)
이름 입력 : 코난
국어 입력 : 100
영어 입력 : 100
수학 입력 : 95
이름 국어 영어 수학 총점 평균
코난 100 100 98
-----------------------------------------
Package : sample04
-----------------------------------------
★ 내용을 파일로 출력
Package : sample04
Interface : MessageBean.java
Class : MessageBeanImpl.java
HelloSpring.java - main()
Interface : Outputter.java
Class : FileOutputter.java - 파일로 출력
-------------------------------------------
'JAVA 개발 공부 정보' 카테고리의 다른 글
[java-note] WAC (0) | 2018.02.22 |
---|---|
자바수업-스프링 스프링설정 (0) | 2018.02.22 |
자바수업-스프링 Chapter03-스프링AOP (0) | 2018.02.22 |
자바수업-스프링-Chapter04-스프링JDBC (0) | 2018.02.22 |
자바수업-스프링 Chapter06-스프링MVC (0) | 2018.02.22 |