JAVA/SPRING 2009. 5. 6. 11:10

스프링 프레임워크가 가지는 가장 핵심적인 기능은 IOC(Inversion Of Control)입니다. 그중에서 DI(Dependency Injection)는 스프링 프레임워크에서 지원하는 IOC의 한 형태입니다.
DI는 클래스 사이의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동적으로 연결해 주는 것을 말합니다. 컨테이너가 의존관계를 자동적으로 연결시켜 주기때문에 컨테이너 API에 종속되는 것을 줄일 수 있습니다.

의존관계를 설정하는 방식으로는 자주 쓰이는 것들에는 생성자 방식(Constructor Injection), 프로퍼티 설정 방식(Setter Injection) 등이 있습니다.

1. 생성자 방식
UserServiceImpl.java 

public class UserServiceImpl implements UserService {

  private UserDAO userDAO;

  public UserServiceImpl(UserDAO newUserDAO) {

    this.userDAO = newUserDAO;

  }


  ...


}



applicationContext.xml

  <bean id="userDAO" class="yoyojyv.dao.MySQLUserDAO"/>

  <bean id="userService" class="yoyojyv.service.UserServiceImpl">

    <constructor-arg>

      <ref bean="userDAO"/>   

    </constructor-arg>

  </bean>


UserServiceImpl.java 의 생성자와 applicationContext.xml 의 3~5번째줄의 <constructor-arg>태그를 이용하여  의존하는 객체를 전달 할 수 있습니다. 

    <constructor-arg ref="userDAO"/ >

바로위에 처럼
한줄로 표현도 가능하죠.


2. 프로퍼티 설정 방식
UserServiceImpl.java 

public class UserServiceImpl implements UserService { 

  private UserDAO userDAO;    

  public void setUseDAO(UserDAO newUserDAO) {   

    this.userDAO = newUserDAO;  

  } 

  ....

 }


applicationContext.xml

  <bean id="userDAO" class="yoyojyv.dao.MySQLUserDAO"/>

  <bean id="userService" class="yoyojyv.service.UserServiceImpl">

    <property name="userDAO">

      <ref bean="userDAO"/>

    </property>

  </bean>


UserServiceImpl.java 의 3~5번째줄의 setter메소드와 applicationContext.xml 의 3~5번째줄의 <property>태그를 이용하여  의존하는 객체를 전달 할 수 있습니다. 

나머지 방식들과 IoC container에관한 내용은 여기(The Spring Framework - Reference Documentation)<-- 에서 확인 하세요~
posted by 나는너의힘
: