본문 바로가기

Programming/SpringFramework

Spring DI & IOC

 처음에 스프링을 접했을때는 너무 생소한 단어였던 기억이난다.

사실 지금 회사에서는 닷넷 & Nancy프레임웍을 사용하고 있는데 어디서나 Ioc 컨테이너는 중요한 것 같다.

 

1. IoC란?

 간단하게 제어의 주도권을 스프링에게 넘겨주는 것을 말한다.

일반적으로 클래스는 자신이 사용할 객체를 생성하여 사용한다. 즉 사용할 프로그램이 주도권을 가지고 있다. 

하지만, Ioc는 제어흐름을 뒤집는다. 클래스는 자신인 사용할 객체를 직접 생성하지 않고, 제어권한을 가진 특별한 오브젝트에 의해 결정되고 만들어진다



2. IoC 구현 방법

DL(Dependency Lookup) 의존성 검색

저장소에 저장되어 있는 Bean에 접근하기 위하여 사용하고자 하는 Bean을 검색하는것 


DI(Dependency Injection) 의존성 주입

클래스 사이, 계층 사이에 필요로하는 의존 관계를 컨테이너가 자동으로 연결해주는것


Setter Injection 

- 인자가 없는 생성자나 인자가 없는 static factory 메소드가 Bean을 인스턴스화 하기 위하여 호출 한후

  Bean의 setter 메소드를 호출화하여 실체화하는 방법

예제)

<bean id = “sampleBean” class=“common.SampleBean”>

<property name = “sample” ref = “goodBean”/>

</bean>


<bean id = “goodBean” class=“common.GoodBean”/>


public class SampleBean {
	private GoodBean sample;

	public void setSample(GoodBean sample){
	     this.sample = sample;
	}	
}


Contstructor Injection

- 생성자를 이용하여 클래스 사이의 의존관계를 연결 하는 방법 

예제)

<bean id = “sampleBean” class=“common.SampleBean”>

<constructor-arg ref = “goodBean”/>

</bean>

<bean id = “goodBean” class=“common.GoodBean”/>

public class SampleBean { private GoodBean sample; public SampleBean(GoodBean sample){ this.sample = sample; } }


Method Injection

- Singleton 인스턴스와 Non singleton 인스턴스의 의존 관계를 연결 시킬 때 사용(별로 사용 안 한다고함)



IoC를 이용한 클래스를 호출하면 팩토리패턴의 장점을 더하여 어떠한 것에도 의존하지 않는 형태로 

구성이 가능하다. 

실행 시점에 클래스간의 관계가 형성된다


P.S 대학교 소프트웨어 공학 수업에서 들었던 의존성을 낮추라는 것의 모범이된다.

.


 

    


'Programming > SpringFramework' 카테고리의 다른 글

bean scope 명시  (0) 2016.04.24
Spring AOP  (0) 2016.04.13
HTTP 에러정리  (0) 2016.04.09
Reflect API - 나만의 라이브러리 만들기 -  (0) 2016.02.10
Spring - 기본 세팅 -  (0) 2016.02.10