Spring Framework DI (Dependency Injection) 의존성 주입
Spring DI / IoC
IoC = 설명할 수 있을 정도로 중요함
IoC : Inversion ofControl
프로그램을 제어하는 패턴 중 하나
DI 는 IoC패턴의 구현방법 중 하나
DI에 따라 프로그램의 흐름이 완전히 뒤바뀐다
스프링 IoC컨테이너 는
기존의 객체를 필요할 때 생성해서 사용하던 방식을 (new ~~~)
-> 객체를 미리 생성해 놓고 꺼내서 사용하는 형태로 바뀐다.
대표적으로 application-context가 있음
//
DI 는 Dependency Injection의 줄임말
스프링 Container 에 만들어둔 각종 클래스(bean)들은 서로 의존적이다
ex) 의존적이다?
A클래스는 B클래스가 없으면 실행 할 수 없다
A는 B에 의존적이다
즉 객체 안에 객체가 저장되는 형태이다
이걸 DI (Dependency Injection)이라 부른다
ex2)
배터리에 의존해서 장난감을 만들었다. -> 배터리에 의존적이다.
배터리 일체형 -> 배터리가 떨어지면 장난감을 새로 구입해야 한다.
배터리 분리형 -> 배터리가 떨어지면 배터리만 교체하면 된다.
DI- 프로그래밍에서 객체를 만들어서 외부에서 따로 주입하는 방법
2가지 의존성 주입 방법
1. 생성자를 통한 의존성 주입 <constructor-arg ref="빈의ID"></constructor-arg>
<constructor-arg ref="빈id"></constructor-arg>
1. setter를 통한 의존성 주입 XML설정
<property name="변수명" value="값"/>
<property name ="변수명" ref="객체"/>
<property name="변수명" value="값"/>
<property name="변수명" ref="객체"/>
빈(Bean)의 범위
싱글톤(Singleton)
스프링 컨테이너에서 생성된 빈(Bean)객체의 경우 동일한 타입에 대해서는 기 본적으로 한 개만 생성이 되며, getBean() 메소드로 호출될 때 동일한 객체가 반환 된다.
프로토타입(Prototype)
싱글톤 범위와 반대의 개념도 있는데 이를 프로토타입(Prototype) 범위라고 한다. 프로토타입의 경우 개발자는 별도로 설정을 해줘야 하는데, 스프링 설정 파일(application-context.xml)에서 빈 (Bean)객체을 정의할 때 scope속성을 명시해 주면 된다.
<bean id="test" class="ex01.SpringTest" scope="prototype"/>