[JAVA] DI: Was ist Abhängigkeitsinjektion?

Zweck dieser Seite

Ich schreibe es, um mich selbst zu überzeugen, weil es nicht richtig aussieht, selbst wenn ich mir verschiedene Erklärungen ansehe.

DI Übersicht

Zuallererst, wenn es sich um einen Lehrbuchstil handelt

"DI realisiert" Inversion of Control Principle ", eines der Entwurfsmuster [^ 1]". Es ist möglich, die Erstellung von Instanzen, aus denen eine Komponente besteht, und die Auflösung von Abhängigkeiten vom Quellcode zu trennen. (Aus einer gründlichen Einführung in Spring durch die NTT DATA Corporation)

Ich weiß nicht, wovon du sprichst. Denken wir vorerst an einem Ort, der leicht zu verstehen ist.

[^ 1]: Sammlung von Design-Know-how in objektorientierten Sprachen

Vorteile von DI

Was ist vorerst zu tun, was kann DI tun?

・ Reduzierte Abhängigkeit zwischen Klassen = lose Kopplung zwischen Klassen (wird lose Kopplung) ・ ↑ erleichtert die Wiederverwendung von Klassen usw. ・ ↑ erleichtert die Durchführung von Unit-Tests usw.

Es scheint, dass. Das Wort "Abhängigkeit" ist oft vorgekommen, daher scheint der Kern hier zu sein. Was sind also "Abhängigkeiten" in der Programmierung?

Was ist eine Abhängigkeit?

Wenn Sie Lehrbuchwörter verwenden, "Ein Modul ändert sich oder hängt vom internen Verhalten eines anderen Moduls ab = Wenn Sie die Spezifikationen eines abhängigen Moduls ändern, ist der Inhalt des Moduls wahrscheinlich beschädigt."

Was ist eine Konfiguration, die tatsächlich stark von der Java-Sprache usw. abhängt?

Hoge.java


class Hoge{
    public void hoge(){
        Fuga fuga = new Fuga();
    }
}

Es ist ziemlich konkret geworden. Sie können sich vorstellen, dass Sie auch die aufrufende Methode ändern müssen, wenn Sie eine neue Klasse in einer Klasse verwenden und wenn sich der Konstruktor der neuen Klasse ändert. Wenn Sie außerdem die Methode in der Klasse ändern, die die Instanz erstellt, wird die Verarbeitung des Aufrufers durcheinander gebracht. Die Lösung für dieses Problem besteht darin, dass die aufrufende Klasse die Schnittstelle verwendet, anstatt eine Instanz zu erstellen, indem die Implementierungsklasse neu erstellt wird, und dass die neue Klasse eine Klasse wird, die die Schnittstelle erbt. Das ist.

Fuga.java


pulic interface Fuga{
    int a;
    void foo();
}

HogeFuga.java


pulic HogeFuga implements Fuga{
    int a;
    void foo(){
        fugafuga;
    };
}

Hoge.java


class Hoge{
    public void hoge(){
        Fuga fuga = new HogeFuga();
    }
}

Mit dieser Methode können Sie die Klasse, die die Schnittstelle implementiert, frei verwenden und die Abhängigkeit verringern. Da die Schnittstellenklasse jedoch nicht neu sein kann, muss die implementierte Unterklasse beim Aufrufer als neu beschrieben werden.

Beschreiben Sie daher die Beziehung mithilfe einer XML-Datei oder einer Anmerkung. ↓ Dies ist "DI"

Spezifische DI-Methode

Setter-Injektion

Hoge.java


class Hoge{
    Fuga fuga;
    public void hoge(){
    }
    public void setFuga(Fuga fuga){
         this.fuga = fuga;
    }
}

Zu diesem Zeitpunkt kann jede Klasse, die die Fuga-Klasse implementiert, an die setFuga-Klasse übergeben werden, und der Hoge-Klasse ist es egal, welche Klasse tatsächlich verwendet wird.

Anmerkungsinjektion

Ist dies der Mainstream bei der Verwendung von Spring?

Hoge.java


class Hoge{
    @Autowired
    protected Fuga fuga
    public void hoge(){
    }
}

Zusammenfassung

Was ist DI? = Ich möchte die Bindung der von mir verwendeten Klasse reduzieren!

Recommended Posts

DI: Was ist Abhängigkeitsinjektion?
Was ist Cubby?
Was ist null? ]]
Was ist java
Was ist Schlüsselumhang?
Was ist Maven?
Was ist Jackson?
Was ist Selbst
Was ist Jenkins?
Was ist ArgumentMatcher?
Was ist IM-Jonglieren?
Was ist params
Was ist SLF4J?
Was ist Fassade? ??
Was ist Java <>?
Was ist Gradle?
Was ist POJO?
Was ist java
Was ist centOS?
Was ist RubyGem?
Was ist before_action?
Was ist Docker?
Was ist Byte?
Was ist Tomcat?
Was ist Maven Assembly?
Was ist Docker-Compose?
Was ist ein Konstruktor?
Was ist vue cli
Was ist eine Schnittstelle?
Was ist Rubys Selbst?
Was ist harte Codierung?
Was ist ein Stream?
Was ist Rubys attr_accessor?
Was ist Java-Kapselung?
Was ist die Erlaubnis verweigert?
Was ist Instanzsteuerung?
Was ist ein Initialisierer?
Was ist Spring Tools 4?
Was ist ein Operator?
Was ist Objektorientierung?
Was ist Guavas @VisibleForTesting?
Was ist ein MVC-Modell?
Was ist eine Anmerkung?
Was ist Java-Technologie?
Was ist Java API-Java?
Was ist @ (Instanzvariable)?
Was ist Gradles Artefakt?
Was ist JPA-Prüfung?
Dolch2 - Android-Abhängigkeitsinjektion
[Java] Was ist flatMap?
Was ist ein Servlet?
Was ist Webentwicklung?
[Java] Was ist ArrayList?