Java Spring Lose Kupplung
Das objektorientierte Konzept ist ein gutes Design, um das System in eine Gruppe wiederverwendbarer Objekte zu unterteilen. Wenn das System jedoch größer wird, insbesondere bei Java -Projekten, werden riesige Objektabhängigkeiten immer eng gekoppelt, um Objekte schwer zu verwalten oder zu ändern. In diesem Fall können alle Objektabhängigkeiten einfach und effizient unter Verwendung des Spring -Frameworks als Kernmodul verwaltet werden.
Beispiel des Ausgangsgenerators
Sehen wir uns ein Beispiel an, nehmen wir an, dass Ihr Projekt eine Funktionsausgabe im CSV- oder JSON -Format hat. Ihr Code sieht möglicherweise wie das folgende Beispiel aus:
Datei: ioutputgenerator.java Ausgabegenerator Schnittstellenpaket com.yiibai.output; public interface ioutputGenerator {public void generateOutput ();} Datei: CSVoutputGenerator.java Ein CSV -Ausgangsgenerator wird verwendet. Paket com.yiibai.output.impl; import com.yiibai.output.IoutputGenerator; öffentliche Klasse CSVoutputGenerator implementiert ioutputGenerator {public void generateOutput () {System.out.println ("CSV -Ausgangsgenerator"); }} Datei: JsonOutputGenerator.java Ein JSON -Ausgangsgenerator wird verwendet, um die IOutputGenerator -Schnittstelle zu implementieren. Paket com.yiibai.output.impl; import com.yiibai.output.IoutputGenerator; public class JsonOutputGenerator implementiert ioutputGenerator {public void generateOutput () {System.out.println ("JSON -Ausgangsgenerator"); }} Es gibt verschiedene Möglichkeiten, iOutputGenerator aufzurufen und Spring zu verwenden, um zu vermeiden, dass Objekte eng miteinander verbunden sind.
1. Methode 1 wird direkt aufgerufen
Der normale Weg besteht darin, es direkt anzurufen.
Paket com.yiibai.common; import com.yiibai.output.ioutputGenerator; import com.yiibai.output.impl.csvoutputGenerator;/ * http://www.manongjc.com/article/1602.html */public class app {public static static void Main (String [] {ioutputGe appl. CsvoutputGenerator (); output.generateOutput (); }}Es gibt Probleme
Auf diese Weise ist das Problem, dass "Ausgabe" eng mit CSVoutputGenerator gekoppelt ist und jede durch die Ausgabe generierte Änderung möglicherweise Codeänderungen beinhalten. Wenn dieser Code während Ihres gesamten Projekts verstreut ist, werden Sie bei jeder Änderung, die durch die Ausgabe erzeugt wird, dazu führen, dass Sie leiden.
Methode 2 Nennen Sie es mit einer Helferklasse
Vielleicht möchten Sie eine Helferklasse erstellen, um alle Ausgaben in der Klasse zu implementieren.
Paket com.yiibai.output; import com.yiibai.output.IoutputGenerator; import com.yiibai.output.impl.csvoutputGenerator; öffentliche Klasse OutputputPer {ioutputGenerator OutputGenerator; public outputhelper () {outputGenerator = new CSVoutputGenerator (); } public void generateOutput () {outputGenerator.generateOutput (); }} Rufen Sie es über die Helferklasse an
Paket com.yiibai.common; import com.yiibai.output.outputhelper; public class App {public static void main (String [] args) {outputhelper output = new Outputhelper (); output.generateOutput (); }}Es gibt Probleme
Dies sieht eleganter aus als zuvor, nur eine Helferklasse zu verwalten, aber die Helferklasse ist immer noch eng mit dem CSVoutputGenerator gekoppelt, und jede Änderung, die durch die Ausgabe generiert wird, umfasst immer noch kleine Codeänderungen.
Methode 3 Feder
In diesem Fall ist die Injektion von Frühlingsabhängigkeit (DI) eine gute Wahl. Durch die Federerzeugung kann die Ausgangserzeugung lose an den Ausgangsgenerator gekoppelt werden.
Die Opputhelper -Klasse hat kleinere Modifikationen.
Paket com.yiibai.output; import com.yiibai.output.ioutputGenerator; öffentliche Klasse OutputputPer {ioutputGenerator outputGenerator; public void generateOutput () {outputGenerator.generateOutput (); } public void setOutputGenerator (ioutputGenerator outputGenerator) {this.outputGenerator = outputGenerator; }} Erstellen Sie eine Feder -Bean -Konfigurationsdatei und deklarieren Sie hier alle Java -Objekt -Abhängigkeiten.
<!-Spring-common.xml-> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: Schemalo Cation = "http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5sd"> <bean id = "outputhelper"> <Eigenschaft name = "outputGenerator" ref = "csvoutputGenerator" /> < /bean> <bean id = "csvoutputGenerator" /> <bean id = "jsonOutputGenerator" /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < /> < />
Nennen Sie es durch den Frühling
Paket com.yiibai.common; import org.springframework.context.ApplicationContext; import org.springframework.context.support.classpathxmlApplicationContext; ClassPathXmlApplicationContext (neuer String [] {"Spring-common.xml"}); Outputhelper output = (outputaTelper) context.getbean ("outputhelper"); output.generateOutput (); }} Ändern Sie nun einfach die Spring XML -Datei mit einem anderen Ausgabergenerator. Nur die Spring -XML -Dateien ohne unzensierte Änderungen ändern, bedeutet weniger Fehler.
Schlussfolgerung: Mit Spring Framework - diese Abhängigkeitsinjektion (DI) ist für das Objektabhängigkeitsmanagement nützlich, wodurch sie eleganter, hochflexibler und einfach bei der Entwicklungsmanagement großer Java -Projekte aufrechterhalten wird.
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!