Heim >Java >javaLernprogramm >Was ist das Java-Designprinzip der Abhängigkeitsinversion?

Was ist das Java-Designprinzip der Abhängigkeitsinversion?

PHPz
PHPznach vorne
2023-05-12 21:10:04867Durchsuche

Einführung in die Abhängigkeitsinversion

Wir hören oft einige Begriffe wie Abhängigkeitsinversion, Abhängigkeitsinversion, Kontrollinversion, Abhängigkeitsinjektion und IOC. Diese Begriffe hören wir oft und das Abhängigkeitsinversionsprinzip in Entwicklungsdesignprinzipien Das hängt damit zusammen. Werfen wir einen Blick auf diese Begriffe:

  • Inversion of Control (IOC) ist eine Frage, die grundsätzlich in Interviews gestellt wird Das Merkmal von Spring ist, dass Spring ein grundlegendes Framework ist, das zuvor durch einfache Methoden ersetzt wurde. Dies ist jedoch problematischer, wenn die Berechtigungen vollständig von den Entwicklern kontrolliert werden müssen Dies bedeutet, dass Entwickler einige Entwurfsmuster verwenden können, um sie nicht auf der Grundlage von Beziehungen zu entwickeln. Solange die zu implementierenden Funktionen implementiert sind, werden die Berechtigungen vom Programm gesteuert Der vollständige Name lautet „Abhängigkeitsinjektion“. Ein einfaches Verständnis besteht darin, dass die zu bedienenden Objekte über Konstruktionsmethoden, Get/Set und Schnittstellenobjekte erstellt werden und neue Objekte über übergebene externe Objekte eingefügt werden. Dies ist Abhängigkeitsinjektion, und Spring ist es ein besser zu verwendendes Framework;

  • Abhängigkeitsinversionsprinzip (DIP), der vollständige Name ist Abhängigkeitsinversionsprinzip, das auch als Abhängigkeit bezeichnet werden kann. Das Inversionsprinzip bedeutet:

    Module auf hoher Ebene sollten sich nicht auf Module auf niedriger Ebene verlassen. High-Level-Module und Low-Level-Module sollten durch Abstraktionen voneinander abhängig sein. Darüber hinaus sollten Abstraktionen nicht von spezifischen Implementierungsdetails abhängen, die von Abstraktionen abhängen. Wie unterscheiden oder kennzeichnen wir die Beziehung beim Zeichnen? Warum wird ein solches Design verwendet? Andernfalls sind High-Level-Module stark an Low-Level-Module gebunden, und die High-Level-Module werden vom Code der Low-Level-Module nicht beeinflusst Ist es unbedingt erforderlich, diese Regel in tatsächlichen Szenarien einzuhalten? Werfen wir einen Blick auf ein allgemeines Beispiel:
  • MVC-Architektur: Gemeinsame Verwendung Controller -> Service -> Dao, Controller ist ein High-Modul für Service, Service ist auch ein High-Modul für Dao, aber wir befinden uns in tatsächlichen Geschäftsszenarien , es wird direkt durch Injektion entwickelt. Natürlich injizieren einige möglicherweise nicht direkt und erhalten Objekte über Schnittstellen, was die Arbeitskosten erhöht.

    Dann haben wir eine Frage: Wird die Anwendung dieses Prinzips zu einer Erhöhung der Arbeitskosten führen? Nach meinem Verständnis sollten Module auch in eine Granularität unterteilt werden und müssen auch in Beziehungen zwischen Modulen, Schlüsselbeziehungen zwischen Codes, grundlegende Framework-Designbeziehungen und Geschäftscodebeziehungen unterteilt werden Es ist nicht erforderlich, dieses Prinzip zu verwenden, um es zu erweitern.

    Hollywood-Prinzip
Hollywood-Prinzip wird mit „Don’t call us, we’ll call you“ abgekürzt. Der populären Wissenschaft zufolge können Sie in Hollywood, nachdem Sie Ihren Lebenslauf beim Unterhaltungsunternehmen eingereicht haben, nur nach Hause gehen und warten. Da das darstellende Kunstunternehmen die vollständige Kontrolle über das gesamte Unterhaltungsprojekt hat, können Schauspieler die Aufgaben des Unternehmens nur passiv annehmen und ihre Auftritte in den erforderlichen Verknüpfungen durchführen. Dies deckt sich mit unserem Abhängigkeitsinversionsprinzip. Alle Abhängigkeitsinversionsprinzipien werden auch Hollywood-Prinzipien genannt.

Die spezifische Verkörperung des Hollywood-Prinzips ist das Vorlagenmethodenmuster. Alle Komponenten sind passiv und der Container ist für die gesamte Komponenteninitialisierung und -aufrufung verantwortlich. Dies ist auch ein Punkt, den ein Grundgerüst berücksichtigen sollte. Es hat vor allem die folgenden Vorteile:

Was ist das Java-Designprinzip der Abhängigkeitsinversion?

Unterstützung für schnittstellenbasierte Programmierung

Reduzieren Sie die Abhängigkeit von Singletons und abstrakten Fabriken

Reduzieren Sie die Kopplung zwischen Geschäft und Framework

Geschäftskomponenten sind wiederverwendbar und steckbar

Abhängig vom Framework von Spring
  • Wir müssen das Konzept klarstellen, dass IOC ein Feature von Spring ist, das die Features des Spring-Frameworks ausmacht, und das ist nicht der Fall das Spring-Framework, das IOC erstellt hat.

    Welche Rolle spielt das IOC von Spring? Das sogenannte IOC bedeutet, dass der
  • Spring IOC-Container für den Lebenszyklus von Objekten und die Beziehung zwischen Objekten verantwortlich ist.
  • Spring IOC-injizierte Objekte stellen auch abhängige Objekte auf folgende Weise bereit: Konstruktormethodeninjektion, Stter-Methodeninjektion, und Schnittstelleninjektion.
  • Konstruktorinjektion

    Konstruktorinjektion bedeutet, wie der Name schon sagt, dass das injizierte Objekt der Außenwelt mitteilt, welche abhängigen Objekte es benötigt, indem es die Parameterliste abhängiger Objekte in seiner Konstruktionsmethode deklariert. Die Konstruktorinjektion ist relativ einfach und kann nach Abschluss der Konstruktion durch die Konstruktionsmethode vollständig verwendet werden.
<code>TestBean(Test test){<br>      this.test = test;<br>}</code>

Setter-Methodeninjektion

Bei JavaBean-Objekten greifen wir im Allgemeinen über die Getter- und Setter-Methoden auf die Eigenschaften des Objekts zu und legen diese fest. Daher muss das aktuelle Objekt nur die entsprechende Setter-Methode für das Objekt bereitstellen, von dem es abhängt, und das entsprechende abhängige Objekt kann über diese Methode auf das injizierte Objekt festgelegt werden. Im Vergleich zur Konstruktorinjektion ist die Setter-Injektion entspannter und flexibler. Sie kann jederzeit injiziert werden

<code>public class TestBean {<br><br>    private Test test;<br><br>    public void setTestBean(Test test) {<br>        this.test = test;<br>    }<br>}</code>

Schnittstelleninjektion

Schnittstelleninjektion ist aufwändiger, da das abhängige Objekt unnötige Schnittstellen implementieren muss, daher müssen wir dieses Szenario verwenden vernünftigerweise kommen sie im Allgemeinen selten in grundlegenden Frameworks vor, werden aber eher in Geschäftsfeldern verwendet.

Annotation-Injection

Jetzt wird die gängige Injektionsmethode von Spring hauptsächlich durch Annotationen implementiert, die alle auf der Meta-Annotation @Component basieren, die viele abgeleitete Annotationen mit @Component generiert.

<code>@Autowrited<br>private TestBean testBean;<br><br>@Component<br>public TestBean(){<br><br>}<br></code>

Das obige ist der detaillierte Inhalt vonWas ist das Java-Designprinzip der Abhängigkeitsinversion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen