IOC 와 DI

2888 단어 DIIOCservice locator
자바 에 서 는 많은 구성 요소 나 인 터 페 이 스 를 큰 응용 프로그램 으로 구성 할 수 있 는 방법 이 많 습 니 다.Dendency Injection 은 서비스 포 지 셔 닝 기기 의 하나 로 실현 할 수 있 습 니 다.
      j2ee 의 세계 에서 많은 오픈 소스,활발 한 프레임 워 크 가 Inversion of control 을 실현 했다.예 를 들 어 Pico Container 와 spring 은 겉 으로 는 아래 의 원칙 들 을 탐구 하 는 것 이 재 미 있 는 일이 다.
구성 요 소 는 수백 권 의 책 과 개념 을 찾 아 그 를 소개 할 수 있다.내 가 이해 하 는 것 은 그 가 이런 소프트웨어 라 는 것 이다.그 는 쉽게 수정 되 지 않 을 것 이다.작 가 는 그의 사용 을 통제 할 수 없고 시스템 이 그것 을 사용 할 때 그들의 코드 를 수정 할 필요 가 없다.한편,하나의 서 비 스 는 구성 요소 와 마찬가지 로 외부 환경 에 의 해 호출 되 지만 구성 요 소 는 짧 은 방식 으로 만 호출 되 고(jar,dll)서 비 스 는 오 랜(webservice,socket)입 니 다.
class MovieLister...
public Movie[] moviesDirectedBy(String arg) { List allMovies = finder.findAll(); for (Iterator it = allMovies.iterator(); it.hasNext();) { Movie movie = (Movie) it.next(); if (!movie.getDirector().equals(arg)) it.remove(); } return (Movie[]) allMovies.toArray(new Movie[allMovies.size()]); } 예 를 들 어 이 코드 는 매우 우아 하지 않 게 썼 다.그 는 finder 에 게 모든 영 화 를 되 돌려 주 었 고 제거 한 후에 스스로 선별 했다.나의 진정한 목적 은 아름 다운 movieDirectBy 방법 을 영화 가 어떻게 저장 되 는 지 에 독립 시 키 는 것 이다.그래서 모든 방법 은 핑 계 를 가리 키 고 finder 를 어떻게 찾 는 지 는 클 라 이언 트 의 요구 에 달 려 있다.Public interface MovieFinder{List findAll();}이렇게 하면 어느 정도 결합 을 해제 할 수 있 습 니 다.class MovieLister...private MovieFinder finder;public MovieLister() { finder = new ColonDelimitedMovieFinder("movies1.txt"); } 예 를 들 어 저 는 한 파일 에서 모든 movie 를 가 져 오고 싶 습 니 다.그러면 이 를 전문 적 으로 처리 하 는 finder 만 가 져 오 면 됩 니 다.물론 저 는 다른 곳 에서 xml 파일,웹 serivce,또는 SQL database 등 을 얻 을 수 있 습 니 다.예 를 들 어 제 친구 도 이런 영 화 를 얻 고 싶 습 니 다.그러나 저 는 그의 영화 가 어떤 방식 으로 저장 되 었 는 지 모 르 겠 습 니 다.컴 파일 환경 에서 이런 종 류 를 불 러 올 수 없습니다.이것 이 바로 IOC 가 나타 난 의미 입 니 다.나 는 spring 의 큰 특성 이 IOC 라 는 것 은 특성 이 라 고 할 수 없다 고 생각한다.왜냐하면 이것 은 모든 경량급 프레임 워 크 가 실현 할 수 있 기 때문이다.ioc 는 필요 한 구성 요 소 를 필요 한 호출 자 에 게 어떻게 배치 하 는 지 를 고려 해 야 합 니 다.di 는 그 중의 실현 방식 이 라 고 할 수 있 습 니 다.constructor 주입,setter 주입,interface 주입(예 를 들 어 struts)등 이 있 을 수 있 습 니 다.여 기 는 일일이 열거 하지 않 습 니 다.DI 를 제외 하고 우 리 는 service locator 로 해당 하 는 서 비 스 를 찾 을 수 있다.그의 중심 사상 은 locator 가 필요 한 모든 서 비 스 를 어떻게 hold 하 는 지 아 는 것 이다.마치 그 가 어떤 finder 를 알 고 영 화 를 찾 는 것 과 같다.나 는 지금 하나의 예 로 locatorclass MovieLister...MovieFinder finder=ServiceLocator.movieFinder()를 실현 합 니 다.class ServiceLocator... public static MovieFinder movieFinder() { return soleInstance.movieFinder; }private static ServiceLocator soleInstance; private MovieFinder movieFinder;3.이것 은 이 locator 의 비교적 조잡 한 실현 일 뿐 입 니 다.우 리 는 그것 을 동적 인'class ServiceLocator...private static ServiceLocator sole Instance'로 설정 할 수 있 습 니 다.public static void load(ServiceLocator arg) { soleInstance = arg; } private Map services = new HashMap(); public static Object getService(String key){ return soleInstance.services.get(key); } public void loadService (String key, Object service) { services.put(key, service); }개인 적 으로 locator 는 공장 같 습 니 다.색 서비스 locator 를 선택 하 느 냐,DI 를 선택 하 느 냐 는 구체 적 인 상황 에 달 려 있 습 니 다.

좋은 웹페이지 즐겨찾기