IOC 와 DI
2888 단어 DIIOCservice locator
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 를 선택 하 느 냐 는 구체 적 인 상황 에 달 려 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Go] 와이어를 통해서 꼭 필요한 충분한 디.go-cloud에 첨부된 Golang은 DI 도구인 "Wire"를 사용하면 좋습니다.API는 구현과 인터페이스 연결에 집중할 수 있고 생성된 코드도 간단하다.의존 관계의 변경(= 공장 방법의 서명 변경)도 강하다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.