뚜벅이 한걸음

스프링 프레임 워크 - 의존성 주입(Dependency Injection) 본문

Spring

스프링 프레임 워크 - 의존성 주입(Dependency Injection)

뚜벅뚜벅뚜벅이 2022. 7. 11. 19:48
반응형

1. 의존성 주입(Dependency Injection)

: Dependency Injection의 약자로 의존 관계 주입 즉, 오브젝트 사이의 의존 관계를 만드는 것이다.

2. DI의 종류

1) Setter Injection( 세터 주입)

: 클래스를 만들때 만든 setter를 이용하여 의존성을 주입하는 방법

2) Construction

Injection( 생성자 주입)

: 클래스의 생성자를 이용하여 의존성을 주입

B b = new B();
A a = new A(b); // 인젝션

3. 스프링에서의 DI(Dependency Injection)

: 오브젝트간의 의존관계를 자동화해주는 것을 의미하며 Ioc 컨테이너에서 자동화 역할을 담당한다.

※ 예시

: class A는 field1과 field2라는 변수를 가지고 있고,

class B는 b_field 라는 변수를 가지고 있다.

class B는 class A를 변수로서 가지고 있다.

package diEx01;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class Main {

	public static void main(String[] args) {
	//순행주입
		A a = new A();
		a.setField1("a의 field1입니다.");
		a.setField2("a의 filed2입니다.");
		
		B b = new B();
		
		//setter주입 (의존주입- B는 A가 있어야 한다. a를 먼저생성하고 setter로 주입 - 순행주입(순서대로 개발하고 개발자가 주입함))
		b.setA(a);
		b.setB_field("b의 field입니다.");
		
		b.printInfo();
		
	
	//spring ioc 컨테이너를 사용하여 객체 의존 주입 확인하기
		String path = "classpath:applicationContext.xml";	
        //classpath: 라고 되어있으면 컴퓨터가 resources파일을 뒤진다
		//spring ioc 컨데이너의 객체 생성(xml에서 설정된 내용들이 ctx에 담김)
		//컨테이너 객체가 생성되는 시점에 생성자로 넘어간 classpath 정보를 읽어들이고 
		//해당 xml에 있는 bean객체로 생성하고 객체 생성시 필요한 객체간의 의존을 주입한다.
		AbstractApplicationContext ctx = new GenericXmlApplicationContext(path);
		
		//ioc컨테이너가 생성하여 가지고 있는 객체 b를 꺼내 spring B 변수에 대입
		B springB = ctx.getBean("b", B.class);	//인자값은 xml에 정의한 bean의 이름, 클래스의 이름
		
		springB.printInfo();
		
		
		
		
		
	}
	
}

springB의 정보를 불러오면 xml에 정의해둔 객체를 프레임워크가 생성했다는 것을 알 수 있다.

개발자는 xml에 설계도만 작성해두고 생명주기는 프레임워크가 담당하는 것이다.

반응형