Spring IoC - DL (Dependency Lookup)

2010. 8. 15. 17:41plming/Java - Spring

서블릿 컨테이너는 web.xml에서 서블릿을 관리
EJB 컨테이너는 ejb-jar.xml에 설정되어 있는 정보들이 JNDI 저장소에 저장되어 관리

Spring 프레임워크는 POJO 빈을 관리하기 위하여 XML 파일 또는 Properties 파일을 이용
Properties 파일의 경우에는 Properties 파일 구조가 가지는 한계 때문에 Spring 프레임워크 기반으로 개발하는 거의 모든 애플리케이션은 XML 파일을 POJO 빈을 관리하기 위한 저장소로 사용하고 있다.

DL은 저장소에 저장되어 있는 빈(Bean)에 접근하기 위하여 컨테이너에서 제공하는 API를 이용하여 사용하고자 하는 빈을 Lookup하는 것


- EJB 에서는...

 import net.javajigi.servicelocator.ServiceLocator;

 import net.javajigi.user.ejb.UserService;
 import net.javajigi.user.ejb.UserServiceHome;


 public class UserServiceDelegate {

     private static final Class homeClazz = UserServiceHome.class;
     private UserService userService = null;

     public UserServiceDelegate() {
         ServiceLocator serviceLocator = ServiceLocator.getInstance();
         UserServiceHome userServiceHome = (UserServiceHome) serviceLocator
                 .getRemoteHome(UserServiceHome.JNDI_NAME, homeClazz);
         try {
             userService = userServiceHome.create();



- Spring 에서는...

 import javax.servlet.ServletContext;

 import net.javajigi.user.service.UserService;

 import org.springframework.web.context.WebApplicationContext;
 import org.springframework.web.context.support.WebApplicationContextUtils;

 public class UserServiceHelper {
     private static final String USERSERVICE_BEANID = "userService";

     public static UserService getUserService(ServletContext ctx) {
         WebApplicationContext wac = WebApplicationContextUtils
                 .getRequiredWebApplicationContext(ctx);

         return (UserService) wac.getBean(USERSERVICE_BEANID);



Lookup하기 위해 컨테이너에서 제공하는 API와 의존관계가 발생
컨테이너에 대하여 가지는 종속성이 증가할 수 밖에 없다.
컨테이너와의 종속성을 줄이기 위한 방법으로 DI (Dependency Injection)을 사용


[출처] Spring 프레임워크 워크북