티스토리 뷰

Spring

DI (Dependency Injection)

snail voyager 2018. 9. 9. 20:45
728x90
반응형

IoC는 Dependency Lookup 과 Dependency Injection 으로 나뉜다.



□ Dependency Lookup

IoC 컨테이너는 각 컨테이너에서 관리할 객체들을 위한 별도의 Bean 설정파일을 가진다. (XML 파일)

이런 저장소에서 사용자가 사용하고자 하는 빈을 특정 id로 찾아서 사용하는 방식.

Bean을 Lookup 하기 위하여 컨테이너에 제공하는 API와 의존관계가 발생(ApplicationContext의 getBean() 메소드)

가능한 Dependency Lookup을 사용하지 않는 것이 컨테이너의 종속성을 줄일 수 있다.



□ Dependency Injection (Spring에서 사용)

하나의 객체가 정상적으로 수행되기 위해서 다른 객체를 참조하는 것을 의존관계.
각 클래스 사이의 의존관계를 소스 코드에 명시하지 않고 빈 설정파일을 통해 처리.
Spring 설정 파일에 Bean을 등록할 때, 의존관계를 적절하게 설정하기만 하면 이 설정파일을 로딩한 컨테이너가 자동으로 의존관계를 처리해주는 것.
개발자들이 컨테이너 API를 이용하여 의존관계를 관여할 필요가 없게 되어 컨테이너 API에 종속되는 것을 줄일 수 있고 개발자들은 단지 Bean 설정파일에서 의존 관계 정보를 추가하기만 하면 된다.


Setter Injection : Setter(속성) 메소드를 이용, Annotation 사용


* Java 코드

public class BoardServiceImpl implements BoardService{

   private BoardDAO boardDAO;


   public void setBoardDao(BoardDAO boardDAO){

      this.boardDAO = boardDAO;

   }

}


* Bean 설정 파일

<bean id="boardService" class="com.board.BoardServiceImpl">

   <property name="boardDAO" ref="boardDAO" />

</bean>


<bean id="boardDAO" class="com.board.BoardDAO" />


Constructor Injection : 생성자 메소드를 이용


* Java 코드

public class BoardServiceImpl implements BoardService{

   private BoardDAO boardDAO;


   public BoardServiceImpl(BoardDAO boardDAO){

      this.boardDAO = boardDAO;

   }

}


* Bean 설정 파일

<bean id="boardService" class="com.board.BoardServiceImpl">

   <constructor-arg ref="boardDAO" />

</bean>


<bean id="boardDAO" class="com.board.BoardDAO" /> 




728x90
반응형

'Spring' 카테고리의 다른 글

Eclipse에서 Maven 프로젝트 생성, Git Hub 연동  (0) 2020.05.02
Spring 버전 차이  (0) 2019.07.15
JPA Hibernate  (0) 2019.07.14
Spring Annotation  (0) 2019.07.14
Spring Framework  (0) 2018.09.09
반응형
300x250