[게시물] IOC (반전 제어), DI (의존성 주입) 란

IOC (반전 제어) 란, DI (의존성 주입)

원래 주소 (내용의 요약 부분) : https://blog.csdn.net/qq_22654611/article/details/52606960/

스프링 프레임 워크는 DI이 두 가지 개념이 명확하지 않다, 어떤 사람들은 봄의 IoC (Inversion of Control에) 항상 IOC의를 느끼는 초보자 봄 사람들이 두 개념, DI (의존성 주입) 들어 본 것 배웠다 오늘 봄 IOC의에 대한 이해에 대한 큰 소 IOC 스프링 프레임 워크의 기술적 이해의 일부뿐만 아니라 이야기를 이해하고, 온라인으로 공유하기가 어렵습니다.

IOC의의 주 Iteye 개방 타오 멋진 설명

  첫째, 공유하고 싶은 것은 Iteye 타오는 원본과 모든 다음, 아주 쉽게 이해하기 위해 작성된 IOC 스프링 프레임 워크의 가축의 기술적 이해를 오픈하고, 원래 주소 : HTTP : //jinnianshilongnian.iteye.com/blog/1413846

1.1 IOC는 무엇입니까

  "관리의 반전"이 아닌 기술,하지만 디자인 아이디어 제어의 IOC의 반전. 자바 개발에서 IOC의 당신이 아니라 내부 오브젝트에 대한 기존의 직접 제어하지 않고, 컨테이너 컨트롤 개체를 디자인 있다는 것을 의미한다. IOC는 얼마나 잘 이해? 이해 IOC의 좋은 키는 우리가 깊이 분석 할 필요가 있음 "누가 반대 이유를 무엇을 제어 컨트롤, 조건을 반전 (반전은 흑자 전환이 있어야합니다) 사람이다"정의하는 것입니다 :

  ● 누가 컨트롤 누가 무엇을 제어 : 기존의 자바 SE 프로그래밍, 우리는 직접 객체 종속 객체를 생성하는 프로그램 이니셔티브 안에 새를 통해 객체를 생성하고, IOC의는 IoC 컨테이너에서 오는 이러한 개체를 생성하는 특별한 컨테이너입니다 제어 객체를 생성, 누가 컨트롤? 물론 IOC의 컨테이너 컨트롤 개체의, 무엇을 제어? 즉 (단지 등 파일과 같은 개체를 포함) 자원의 주요 제어 외부 액세스입니다.

  반대로 왜 ● 무엇을 반대 : 거기가 역 앞으로, 앞으로,이다 획득 제어 직접적으로 종속 객체에 객체에서 우리 자신의 이니셔티브에 의해 기존 응용 프로그램, 반대는 컨테이너에서있는 동안 도움말을 만들고 종속 개체를 삽입, 왜 반전? 컨테이너가 우리가 그것을 수동적으로 종속 객체를 수용의 목적을 종속 객체를 찾아 주입 수 있도록하기 때문에, 반대이며, 어떤 반전? 인수는 개체가 반전에 따라 달라집니다.

  그림 2-1에 표시된 것과 기존의 프로그래밍을 설명하는 전설과 함께, 관련 개체를 만들 수있는 주도권은 다음 결합 :

도 1-1 레거시 애플리케이션의 개략도

  클라이언트에서 더 이상 활성이 IOC의 / DI 컨테이너는, 그림 2-2에 표시된 개체의 클래스를 만들 수 없습니다 경우 :

도 1-2 프로그램 IOC의 구조 / DI 컨테이너의 개략도

1.2의 IoC을 무엇

  IOC는이 기술이 아니라 아이디어, 가이드는 우리가 느슨하게 결합, 더 나은 프로그램을 설계 어떻게 객체 지향 프로그래밍의 중요한 규칙입니다. 기존의 응용 프로그램이 클래스 간의 높은 결합의 결과로 클래스 종속 개체 내에서 우리의 이니셔티브에 의해 만들지는 어려운 시험이다, 당신은 IoC 컨테이너를 일단 만들고 컨테이너가 컨테이너에 컨트롤의 종속 개체를 찾을 수 객체 사이의 객체의 조합을 이식하여 개체를 느슨하게 또한 다중화 기능을 도움이 될 것입니다 테스트를 촉진 것이다, 결합, 더 중요한 것은, 프로그램의 전체 아키텍처는 매우 유연되었다한다.

  사실, 가장 큰 변화를 가져 IOC의 프로그램은 코드에서가 아니라 이데올로기 적 변화의 "마스터 - 슬레이브 전위". 응용 프로그램은 자원이 주도권을 쥐고있는 것을 얻을 원래 보스, 그러나 IOC의에 / DI 생각, 응용 프로그램은 수동되고, 수동 대기 IoC 컨테이너를 작성하고 그것을 필요로하는 자원을 주사한다.

  IOC의 컨테이너 개체 및 의존성 주입하여 해당 개체를 찾을 것이 아니라 개체를 찾을 수 주도권을 쥐고 수 있도록하는 것입니다; "우리에게 오지 마, 우리는 당신을 찾고있다"할리우드 규칙 - 설계 규칙을 지향 개체 중 하나의 IOC의 좋은 표시.

1.3, IOC의 和의

  DI-의존성 주입, 즉 "의존성 주입"런타임 구성 요소 간의 의존 관계는 용기에 의해 결정되고, 성분에 용기 동적 의존성에 의해 분사 될 화상을 밝혔다. 의존성 주입은 소프트웨어 시스템에 더 많은 기능을 가지고 있지만, 구성 요소 재사용 주파수를 강화하고, 유연하고 확장 가능한 플랫폼을 구축 할 수있는 시스템이 아니다. 의존성 주입 메커니즘을 통해, 우리는 특정 자원에 대해 걱정하지 않고 비즈니스 로직을 완료하는 데 필요한 대상 자원을 지정할 수있는 코드없이 사람을 달성하기 위해에서만 간단한 구성 올 필요가있다.

  "의존, 왜에 의존 누가, 분사 뭔가 사람 주입 누가"우리가 깊이 분석 할 필요가 있음을 : DI는 이해하는 열쇠이다 :

  ● 누가 누구에 따라 달라집니다 물론, IoC 컨테이너에 의존하는 응용 프로그램입니다;

  에 의존하는 이유 ● : 응용 프로그램이 외부 리소스 개체를 필요한 제공하는 IoC 컨테이너를 필요로;

  ● 누가 주입 : 그것은 객체가 객체 IOC의 컨테이너 애플리케이션에 주입 분명하다 애플리케이션 의존;

  ● 어떤 주입 (오브젝트, 자원 데이터를 포함하는 정수)에 필요한 외부 자원에 주입 개체.

  무엇에 의해 IOC의와 DI는 그것으로 할까? 사실, 그들은 인해 제어 개념의 반전,보기의 다른 점을 설명하는 동일한 개념이다 모호한 마틴 파울러에 2004 년에 있으므로, 마스터 (아마 단지 컨테이너 제어 대상이 수준을 이해, 보호 객체 관계형에 갈 생각하기 어렵다) 새 이름을 부여하고있다 : "의존성 삽입"비교적 IOC는 말하기를 "의존성 주입"은 명확하게 "개체 의존성 IoC 컨테이너 구성 종속 오브젝트를 주입한다."설명

  봄의 IOC의에 기사를 많이 읽고 사람들 IOC의 해석과 DI의 많은 어쨌든, 설명 할 수없는 감정의 종류를 읽은 후,이다, 모호한 아직도 손실이다, 이해, 느낌이 열려 타오이다 가축 특히 사용자 친화적 인 기술을 쓴 그는 분명 IOC의 (제어의 반전)와 DI (의존성 주입)을 읽고 명확한 통찰력의 느낌을주는, 모든 단어에 대해 설명합니다. 나는 스프링 프레임 워크의 IOC의 이해가 큰 도움이 될해야 초보자를위한 믿을.

둘째, 블로그 Bromon의 공유는 쉽게 DI와 IOC의의 설명을 이해하기

2.1, IOC는 (컨트롤 반전)

  모든 희망의 우선 말을하는 IOC의 (제어의 반전 컨트롤, 반전). 이것은 전체에 봄의 핵심입니다. 소위 IOC는이 스프링 프레임 워크의 경우, 상기 스프링의 관계 개체 및 개체의 수명을 제어하는 ​​책임이있다. 그것은 무엇을 의미 하는가, 우리가 여자 친구를 찾을 수있는 방법에 대한 간단한 예제를 제공? 일반적인 상황이 꽤 크고 좋은 mm가 어디에 우리가 그들을 알 수있는 방법을 생각, 취미, QQ 번호, 전화 번호, IP 번호, IQ 번호 .........에 대해 문의 한 후, 모든 곳에서 볼 수 있다는 것입니다, 그들은 캐스트 좋은 다음에 보내 봐 ......이 과정은, 우리는 그들의 자신의 디자인 및 모든 측면을 복잡 난해한 직면해야한다. 다른 개체를 사용하려는 경우 기존의 응용 프로그램 개발도 객체에, 당신은 당신이 (예 : 연결로 등) 파괴 개체 사용을 마친 후에도, 그것 (자신 JNDI에서 새로운, 또는 쿼리) 가야 및 기타 개체는 항상 대면 또는 클래스는 함께 결합.

  그래서 IOC는 그것을 수행하는 방법인가? 결혼 기관 : 내 여자 친구를 소개합니다 타사 사이에 중매를 통해 여자 친구를 찾고 같은 비트. 제나라와 같은 남성과 여성의 많은 관리 정보를 중매하는 것은, 내가 예를 들어, 내가 여자 친구를 찾으려면 무엇을 말해, 매치 메이킹의 목록을 만들 수 있습니다, 린시 레이처럼 내장 리 자신 같은 외모, 제이처럼 노래, 카를로스 속도와 같은, 기술 다르덴 등이 있으며, 중매는 mm를 제공, 우리의 요구 사항에 따라 될 것입니다, 우리는 단지 라인에 결혼, 그녀에게 가서 사랑에 빠지게. 우리가 후보가 요구 사항을 충족하지 않는 중매 주면 간단하고 명확하고, 우리는 예외가 발생합니다. 전체 프로세스는 더 이상 내 자신에 의해 제어되지 않으며, 이러한 중매 기관 유사한 컨테이너 컨트롤에있다. 봄은 당신을 제공하기 위해 주도권을 쥐고 싶어 당신이 다음 봄이 시스템에 적절한 시간을 실행, 일을 뭔가가 필요, 뭔가있는 봄을 알려, 개발 접근 방식은, 모든 클래스가 스프링 컨테이너에 등록됩니다의 경우 권장 뿐만 아니라 다른 요구 당신은 당신의 물건을 넣어. 클래스의 모든 제어 대상은 더 이상 객체의 수명주기를 참조하지만, 봄 것을 제어하는 ​​스프링에 의해 파괴되지 생성됩니다. 그것은 다른 개체를 제어하기 전에 특정 주제를 들어, 모든 객체는 이제 스프링 제어 때문에 컨트롤의 반전이라고합니다.

2.2 DI (의존성 주입)

  IOC는 시스템의 초점, 당신은 객체에 제공 할 필요가 다른 개체의 동적 실행이다. 이는 DI (의존성 주입 의존성 주입)에 의해 달성된다. 과거에, 우리는 항상 우리가 봄을 말할 필요가 봄과 함께, Connection 객체를 얻기 위해, 자신의 코드 A를 쓰기 원하는 데이터베이스를 조작 할 필요가, A는 연결을 필요로 같은 오브젝트를,이 구조, 때 구성 방법에 대한 연결, 필요성은 알고 있습니다. 시스템은 스프링은 적절한 시간에 연결을 생성 할 실행하고, 따라서 다양한 개체 사이의 관계의 제어를 완료하는 주입되는 주사제 등 다음과 동일하다. 필요가 제대로 실행 연결에 의존하고,이 연결은 스프링에 의해 주입하고, 의존성 주입의 이름이되었다. 그래서 DI는 그것을 달성하는 방법은? 자바의 중요한 특징은 반사 (반사), 프로그램은 그 동적 오브젝트의 생성을 허용 실행될 때, 오브젝트의 실행 방법은, 오브젝트 속성 변경 스프링 주입 반사함으로써 달성 된 후 1.3이다.

  IOC의와 DI의 개념을 이해 한 후, 모든 작품의 나머지는 단지 스프링 프레임 워크에 나무를 쌓아되어, 간단한되고 삭제됩니다.

추천

출처www.cnblogs.com/jinanxiaolaohu/p/11880860.html