소 의 는 j2ee 프레임 워 크 에서 ioc 구현

1.ioc 정의
  IoC 는 바로 Inversion of Control 로 반전 을 제어 한다.
  IoC 의 개념 은 마 이 클 매 츠 슨 이 1996 년 대상 프레임 워 크(Object Oriented Frameworks)를 논의 하 는 글 에서 제시 한 것 이다.대상 을 대상 으로 디자인 및 프로 그래 밍(OOD/OOP)의 기본 사상 은 쉽게 말 하면 복잡 한 소프트웨어 시스템 을 인 터 페 이 스 를 통 해 서로 협력 하 는 대상 으로 분해 하 는 것 이다.이러한 대상 류 의 내부 실현 은 서로 관련 되 지 않 기 때문에 문제 의 복잡성 을 낮 추고 독립 적 이 고 유연 하 게 중용 되 고 확 대 될 수 있다.전형 적 인 대상 을 대상 으로 하 는 프로 그래 밍 언어(예 를 들 어 C+,자바)의 중심 은 언어 체 제 를 제공 하여 이러한 대상 류 를 바탕 으로 하 는 분해,재 활용 과 확장 을 편리 하 게 하고 간소화 하 는 것 이다.
  모듈 화 된 소프트웨어 조립 배치 배치 프레임 워 크 디자인 에서 Michael Mattson 은 IOC 용기 기반 의 IoC 디자인 원칙 을 제시 했다.이 원칙 에 따 르 면 비 즈 니스 논리 모듈 은 구성 요소 프레임 워 크 를 호출 할 필요 가 없 는 서 비 스 를 알 필요 가 없습니다.예 를 들 어 factory 나 lookup 의 directory 나 context 등에 관심 을 가지 지 않 아 도 됩 니 다.소프트웨어 의 조립 배치 와 설정 은 완전히 Ioc 용기 가 반대로 업무 논리 모듈 을 주동 적 으로 제어 하여 배정 한 것 이다.Michael Mattson 은 이른바 할리우드 원칙(Hollywood Principle)으로"나 를 찾 아 오지 마,그때 내 가 너 를 찾 아 갈 거 야"(don't call me,I will call you)라 는 디자인 사상 을 형상 적 으로 비유 했다.이 비유 에서'나'는 Ioc 용 기 를 가리 키 며,'너'는 그 에 의 해 배치 되 는 구성 요 소 를 가리킨다.
   자바 개발 에서 IoC 지 는 공장 모델 을 통 해 공장 신축 에 필요 한 클래스 를 실현 한다.j2ee 경량급 프레임 워 크 에 서 는 ioc 용기 로 제어 된다.ioc 용기 의 유명한 실현 은 Spring 이다.또 다른 Guice,google 명의 의 결과 물이 다.이 두 가지 실현 은 ioc 기술 의 두 가지 발전 방향 을 대표 한다.그들 사이 의 가장 근본 적 인 차 이 는 spring 이 XML 파일 형식 으로 의존 주입 관 계 를 설정 하 는 것 이다.Guice 는 자바 5 주 해 를 통 해 유형 안전 한 주입 을 실현 합 니 다.
2.spring 의 ioc 용기 구현
spring 방식 을 사용 하여 spring ioc 용기 가 제어 하 는 ioc 프로그램 을 만 듭 니 다.
1)인 터 페 이 스 를 정의 하고"hello,World"메 시 지 를 인쇄 합 니 다.

public interface MessageProvider {
 public String getMessage();
}

2)이 인터페이스 구현

public class MessageHello implements MessageProvider {
 public String getMessage() {
  String message = "hello,world";
  return message;
 }
}

3)setter injection

public class HelloWorld {
 private MessageProvider provider;

 public void setProvider(MessageProvider provider) {
  this.provider = provider;
 }

 public void showMessage() {
  System.out.println(provider.getMessage());
 }
}

4)의존 주입 관계 설정
applicationContext.xml 에 설정:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="helloBean" class="test.spring.HelloWorld">
<property name="provider">
   <ref local="helloProvider"/>
</property>
</bean>
<bean id="helloProvider" class="test.spring.MessageHello"></bean>
</beans>

5)테스트 클래스 생 성

public class ShowHello {
public static void main(String[] args){
 try{
 XmlBeanFactory factory =new XmlBeanFactory(new FileSystemResource("src/applicationContext.xml"));
 HelloWorld messageReader = (HelloWorld)factory.getBean("helloBean");
 messageReader.showMessage();
 }catch(Exception ex){
  System.out.println(ex.toString());
 }
}
}

테스트 클래스 실행,콘 솔 출력:Hello,World!
3.Guice 의 ioc 용기 구현
Guice 다운로드 링크(http://code.google.com/p/google-guice/downloads/list)
1)정의 인터페이스

public interface MessageProvider{
    void myMethod();
}

2)구현 클래스 정의

public class MessageHello implements MessageProvider{
    public void myMethod(){
        System.out.println("Hello,World!");
    }
}

3)가이드 주입 류 진행

public class Client{
    MessageProvider service;
    @Inject //    ,   service     ,      
    void injectMessageProvider(MessageProvider service){ //             
        this.service = service;
    }
    public void myMethod(){
        service.myMethod();
    }
}

4)Guice 를 정의 하 는 Module 파일 은 용기 에 주입 하 는 방법 을 알려 줍 니 다.

import com.google.inject.Binder;
import com.google.inject.Module;
import com.google.inject.Scopes;
public class MyModule implements Module{
    public void configure(Binder binder){
       binder.bind(MessageProvider.class).to(MessageHello.class).in(Scopes.SINGLETON);
    //          :       MessageHello    MessageProvider     ,          。
    }
}

5)테스트 클래스 생 성

import com.google.inject.Guice;
import com.google.inject.Injector;

public class Test{
    public static void main(String[] args){
   MyModule module = new MyModule();
   //       
   Injector injector = Guice.createInjector(module);
   //       ,     
   Client client = new Client();
   injector.injectMembers(client);
   //          bean,    , client         
   client.myMethod();   
  }
}

테스트 클래스 실행,콘 솔 출력:Hello,World!

좋은 웹페이지 즐겨찾기