원시 사회에서는 사회적 분업이 거의 없습니다. 도끼가 필요한 사람(호출자)은 스스로 도끼를 갈 수 있습니다. 이에 상응하는 상황은 다음과 같습니다. Java 프로그램의 호출자는 호출자를 생성합니다. 일반적으로 new 키워드를 사용하여 생성자를 호출하여 피호출자를 생성합니다
산업사회에 들어서면서 도끼는 더 이상 일반인이 완성하지 않고 공장에서 생산하게 되었는데, 이때 도끼가 필요한 사람(발신자)이 제조에 신경 쓰지 않고 공장을 찾아 구입하게 되었습니다. 도끼의 프로세스는 간단합니다. 공장 설계 패턴으로 호출자는 공장을 찾기만 하면 되며 호출 수신자의 특정 구현을 관리할 필요가 없습니다.
"공산주의" 사회에서는 도끼가 필요한 사람들은 공장을 찾을 필요도 없으며 사회가 도끼를 제공할 때까지 "앉아서 기다릴" 수 있습니다. 호출 수신자는 팩토리를 무시하고 Spring 종속성 주입을 기다립니다
간단히 말하면 종속성 주입은 필요한 것을 직접 생성하는 것이 아니라 제3자 또는 컨테이너에서 제공하는 것을 의미합니다. 이러한 설계는 소위 느슨한 결합(Loose Coupling)이라고 불리는 직교성을 따릅니다.
DI(종속성 주입)는 IoC(Inversion of Control)라고도 합니다. 즉, 클래스와 메서드 사이의 관계가 제3자(예: 구성 파일)를 통해 "주입"되므로 클래스나 메서드가 필요하지 않습니다. 클래스 메소드는 서로 간의 호출 관계를 해결합니다. 기존 애플리케이션은 일반적으로 클래스 내의 실행 코드에서 클래스가 의존하는 다른 개체를 적극적으로 생성하므로 클래스 간의 긴밀한 결합이 발생하여 클래스를 테스트하고 격리하기 어렵게 만들고 궁극적으로 시스템의 확장 및 유지 관리를 극도로 어렵게 만듭니다. 종속성 주입은 구성 요소 간의 종속성, 구성 및 수명주기 관리를 해결하는 데 사용됩니다. 객체 제어를 전송하면 객체 간의 결합 관계가 느슨해집니다. 더 중요한 것은 응용 프로그램 시스템의 구조가 다음과 같습니다. 이는 객체 지향 디자인 규칙 중 하나인 종속성 디자인 원칙, 유명한 할리우드 원칙을 잘 구현합니다. "전화하지 마세요. 전화하겠습니다. (전화하지 마세요. 전화하겠습니다.) 당신.) 당신)
객체 지향 프로그래밍에서 우리가 자주 다루는 문제는 프로그램의 결합도가 낮을수록 프로그램의 가독성과 유지 관리성이 높아집니다. IoC(제어 반전)는 일반적으로 사용되는 객체 지향 프로그래밍 설계 원리입니다. 이 원리를 사용하면 결합을 줄일 수 있습니다. 종속성 주입은 가장 일반적으로 사용되는 제어 반전 구현입니다.
매우 간단한 개인적인 이해입니다. 의존성 주입은 실제로 어렵지 않습니다. 매우 자연스러운 일입니다. 실제 생활은 프로그래밍보다 실제로 더 어렵습니다. 의존성 주입: 당신은 사람이고 사냥하러 가고 싶으면 총이 필요합니다. , 현재로서는 두 가지 옵션이 있습니다. 첫 번째 옵션은 직접 만드는 것인데 이는 분명히 권장되지 않습니다. 두 번째 방법은 매장에 가서 구매하는 방법인데, 이것이 의존성 주입, 외부에서 주입되기 때문에, 구매하면 발생한 문제를 해결할 수 있고, 주입함으로써 , 의존성을 완화할 수 있습니다. 정말 간단한 일입니다. 통제 원리의 반전: 총을 사러 갈 때 총에 대한 추상적인 개념을 염두에 두어야 합니다. 총기 상점 주인에게 이 총이 있다는 것을 알려 주기만 하면 됩니다. 당신의 마음속에 있는 추상적인 이미지가 그럴 것입니다. 그리고 당신은 신에 의해 창조되었습니다. 신이 당신을 사냥꾼으로 시험하고 싶을 때 신이 당신을 위해 총을 만드는 것이 더 귀찮을 것이지만, 당신의 가방에 총기 사용 설명서가 있다면 그것은 더 쉬울 것입니다. 잠시 후에 총을 얻는 데 도움이 될 것입니다. 좀 더 거칠게 말하면 특정 총에 의존하지 않고 총의 매뉴얼에 의존하는 것이 제어 원리의 역전이다. 분명히 이것이 우리가 실생활에서 하는 일입니다. 컨테이너: 실제의 초강력 공장과 같습니다. 신(프로그래머)은 지속적으로 업그레이드하는 책임을 맡고 있으며, 일반적으로 무엇을 말하더라도 그는 이를 생산하도록 도와주고 무료로 제공할 수 있습니다. . 당신을 위한. 공장은 당신을 위해 모든 더러운 일을 하고, 당신은 인생을 즐기는 것에 대해서만 책임이 있습니다. 이 팩토리는 종속성 주입을 구현하는 데 어려움이 있는 곳입니다.
종속성 주입: 프로그램이 실행 중일 때 다른 개체와 협력해야 하는 경우(해당 메서드 호출, 해당 속성에 액세스) 코드에서 피호출자를 생성할 필요가 없고 외부 컨테이너 주입에 의존합니다
다음 예가 더 흥미로울 수 있습니다
의존성 주입 이해하기:
사람(Java 인스턴스, 호출자)에게는 도끼(Java 인스턴스, 호출 수신자)가 필요합니다
원시 사회에서는 사회적 분업이 거의 없습니다. 도끼가 필요한 사람(호출자)은 스스로 도끼를 갈 수 있습니다. 이에 상응하는 상황은 다음과 같습니다. Java 프로그램의 호출자는 호출자를 생성합니다. 일반적으로 new 키워드를 사용하여 생성자를 호출하여 피호출자를 생성합니다
산업사회에 들어서면서 도끼는 더 이상 일반인이 완성하지 않고 공장에서 생산하게 되었는데, 이때 도끼가 필요한 사람(발신자)이 제조에 신경 쓰지 않고 공장을 찾아 구입하게 되었습니다. 도끼의 프로세스는 간단합니다. 공장 설계 패턴으로 호출자는 공장을 찾기만 하면 되며 호출 수신자의 특정 구현을 관리할 필요가 없습니다.
"공산주의" 사회에서는 도끼가 필요한 사람들은 공장을 찾을 필요도 없으며 사회가 도끼를 제공할 때까지 "앉아서 기다릴" 수 있습니다. 호출 수신자는 팩토리를 무시하고 Spring 종속성 주입을 기다립니다개인적으로 이해하면 종속성 주입은 호출자가 구성 요소를 선언하는 것만으로 구성 요소에 대한 제어권을 얻을 수 있고 구성 요소의 종속성 관리, 검색 및 로딩이 외부에서 완료된다는 의미입니다.
AngularJS에서는
에 의해 호출됩니다. 으아아아$injector
进行这项工作。比如,我在一个服务中注入了
$http
,并用hehe
:종속성 주입은 객체가 언제 생성되고 언제 소멸되는지에 대해 걱정할 필요가 없으며 객체의 수명주기를 프레임워크에서 직접 관리하기만 하면 된다는 의미입니다. 의존성 주입을 제공하는 것입니다.
한 가지 더 덧붙이고 싶은 점은 종속성 주입과 제어 역전은 실제로는 동일한 개념이라는 것입니다.
@Wang_Bourne
http://www.cnblogs.com/kinglongdai/p/3269049.html
MOOC: http://www.imooc.com/video/4907
이론적 이해는 항상 약간 난해하게 느껴집니다. RoboGuice와 같은 종속성 주입을 위한 오픈 소스 프레임워크를 살펴보는 것이 좋습니다.
죄송합니다. 카테고리를 잘못 읽었습니다. RoboGuice는 안드로이드용 프레임워크이지만 원리는 동일합니다
DI(종속성 주입)는 IoC(Inversion of Control)라고도 합니다. 즉, 클래스와 메서드 사이의 관계가 제3자(예: 구성 파일)를 통해 "주입"되므로 클래스나 메서드가 필요하지 않습니다. 클래스 메소드는 서로 간의 호출 관계를 해결합니다. 기존 애플리케이션은 일반적으로 클래스 내의 실행 코드에서 클래스가 의존하는 다른 개체를 적극적으로 생성하므로 클래스 간의 긴밀한 결합이 발생하여 클래스를 테스트하고 격리하기 어렵게 만들고 궁극적으로 시스템의 확장 및 유지 관리를 극도로 어렵게 만듭니다. 종속성 주입은 구성 요소 간의 종속성, 구성 및 수명주기 관리를 해결하는 데 사용됩니다. 객체 제어를 전송하면 객체 간의 결합 관계가 느슨해집니다. 더 중요한 것은 응용 프로그램 시스템의 구조가 다음과 같습니다. 이는 객체 지향 디자인 규칙 중 하나인 종속성 디자인 원칙, 유명한 할리우드 원칙을 잘 구현합니다. "전화하지 마세요. 전화하겠습니다. (전화하지 마세요. 전화하겠습니다.) 당신.) 당신)
angular.js에는 이런 생각이 많이 담겨있습니다.
include var net = require('net');
모두 보라색이에요.
의존성 주입
실제로는 현재 객체의 특징적인 속성이 외부에서 주입된 객체에 의해 결정된다는 뜻입니다.
으아아아예를 들어, 가족이 신발 공장을 연다면 make라는 신발을 생산하는 방법이 있습니다.
시장 수요로 인해 일부 유명 스포츠 신발 회사에서는 제품을 생산하기 위해 귀하의 공장이 필요합니다. 그들은 귀하의 공장에서 생산할 원자재를 확보한 다음 OEM으로 제공할 수 있습니다.
으아아아이런 식으로 나이키가 OEM 작업을 하고 나이키의 소재를 제공해야 한다면, 아디다스가 자체 소재를 제공하면 신발을 생산할 수 있습니다.
즉, 귀하의 신발 공장에서 생산하는 신발이 A사 제품인지 N사 제품인지는 A회사 또는 N회사의 자재를 제공하는지에 따라 달라집니다.
객체 지향 프로그래밍에서 우리가 자주 다루는 문제는 프로그램의 결합도가 낮을수록 프로그램의 가독성과 유지 관리성이 높아집니다. IoC(제어 반전)는 일반적으로 사용되는 객체 지향 프로그래밍 설계 원리입니다. 이 원리를 사용하면 결합을 줄일 수 있습니다. 종속성 주입은 가장 일반적으로 사용되는 제어 반전 구현입니다.
의존성 주입에 대해 자세히 알아보겠습니다
매우 간단한 개인적인 이해입니다. 의존성 주입은 실제로 어렵지 않습니다. 매우 자연스러운 일입니다. 실제 생활은 프로그래밍보다 실제로 더 어렵습니다.
좀 더 이해하면의존성 주입: 당신은 사람이고 사냥하러 가고 싶으면 총이 필요합니다. , 현재로서는 두 가지 옵션이 있습니다. 첫 번째 옵션은 직접 만드는 것인데 이는 분명히 권장되지 않습니다. 두 번째 방법은 매장에 가서 구매하는 방법인데, 이것이 의존성 주입, 외부에서 주입되기 때문에, 구매하면 발생한 문제를 해결할 수 있고, 주입함으로써 , 의존성을 완화할 수 있습니다. 정말 간단한 일입니다.
통제 원리의 반전: 총을 사러 갈 때 총에 대한 추상적인 개념을 염두에 두어야 합니다. 총기 상점 주인에게 이 총이 있다는 것을 알려 주기만 하면 됩니다. 당신의 마음속에 있는 추상적인 이미지가 그럴 것입니다. 그리고 당신은 신에 의해 창조되었습니다. 신이 당신을 사냥꾼으로 시험하고 싶을 때 신이 당신을 위해 총을 만드는 것이 더 귀찮을 것이지만, 당신의 가방에 총기 사용 설명서가 있다면 그것은 더 쉬울 것입니다. 잠시 후에 총을 얻는 데 도움이 될 것입니다. 좀 더 거칠게 말하면 특정 총에 의존하지 않고 총의 매뉴얼에 의존하는 것이 제어 원리의 역전이다. 분명히 이것이 우리가 실생활에서 하는 일입니다.
컨테이너: 실제의 초강력 공장과 같습니다. 신(프로그래머)은 지속적으로 업그레이드하는 책임을 맡고 있으며, 일반적으로 무엇을 말하더라도 그는 이를 생산하도록 도와주고 무료로 제공할 수 있습니다. . 당신을 위한. 공장은 당신을 위해 모든 더러운 일을 하고, 당신은 인생을 즐기는 것에 대해서만 책임이 있습니다. 이 팩토리는 종속성 주입을 구현하는 데 어려움이 있는 곳입니다.
의존성 주입은 공산주의 사회와 동일합니다.