Heim >Java >javaLernprogramm >Was ist das Java-Designprinzip der 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: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 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<code>TestBean(Test test){<br> this.test = test;<br>}</code>
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 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.
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!