Couplage lâche de printemps java
Le concept orienté objet est une bonne conception pour diviser le système en un groupe d'objets réutilisables. Cependant, lorsque le système s'agrandit, en particulier dans les projets Java, des dépendances énormes d'objets seront toujours étroitement couplées pour rendre les objets difficiles à gérer ou à modifier. Dans ce cas, toutes les dépendances d'objets peuvent être gérées facilement et efficacement à l'aide du framework Spring comme module de base.
Exemple de générateur de sortie
Examinons un exemple, supposons que votre projet a une sortie de fonction au format CSV ou JSON. Votre code peut ressembler à l'exemple suivant:
Fichier: iOutputGenerator.java Generator Interface Package Com.yiibai.output; Interface publique iOutputGenerator {public void generateOutput ();} Fichier: CSVOutputGenerator.java Un générateur de sortie CSV est utilisé pour implémenter l'interface ioutputGenerator. package com.yiibai.output.impl; import com.yiibai.output.iOutputGenerator; public class CSVOutputGenerator implémente iOutputGenerator {public void generateoutput () {System.out.println ("CSV Output Generator"); }} Fichier: JSONOutputGenerator.java Un générateur de sortie JSON est utilisé pour implémenter l'interface IOutputGenerator. package com.yiibai.output.impl; import com.yiibai.output.iOutputGenerator; public class jsonOutputGenerator implémente iOutputGenerator {public void generateoutput () {System.out.println ("JSON Sortie Generator"); }} Il existe plusieurs façons d'appeler IOutputGenerator et comment utiliser le ressort pour éviter que les objets soient étroitement liés les uns aux autres.
1. La méthode 1 est appelée directement
La façon normale est de l'appeler directement.
Package 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 vide main (string [] args) {ioutUrgers) CsvoutputGenerator (); output.generateOutput (); }}Il y a des problèmes
De cette façon, le problème est que la «sortie» est étroitement couplée à CSVOutputGenerator, et chaque modification générée par la sortie peut impliquer des modifications de code. Si ce code est dispersé tout au long de votre projet, chaque modification générée par la sortie vous fera souffrir.
Méthode 2 Appelez-le avec une classe d'assistance
Peut-être que vous souhaitez créer une classe d'assistance pour implémenter toutes les sorties à l'intérieur de la classe.
package com.yiibai.output; import com.yiibai.output.iOutputGenerator; import com.yiibai.output.impl.csvoutputGenerator; public class OutPuthelper {iOutputGenerator outputGenerator; public ouputhelper () {OutputGenerator = new CSVOutputGenerator (); } public void generateOutput () {OutputGenerator.GenerateOutput (); }} Appelez-le via la classe d'aide
package com.yiibai.common; import com.yiibai.output.outputhelper; public class app {public static void main (string [] args) {uputhelper output = new OutPuthelper (); output.generateOutput (); }}Il y a des problèmes
Cela semble plus élégant qu'auparavant, la gestion d'une classe d'aide, mais la classe d'aide est toujours étroitement couplée au CSVOutputGenerator, et chaque changement généré par la sortie implique toujours de petits changements de code.
Méthode 3 Spring
Dans ce cas, l'injection de dépendance à ressort (DI) est un bon choix. Le ressort permet à la génération de sortie d'être couplée de manière lâche au générateur de sortie.
La classe OutPuthelper a des modifications plus petites.
package com.yiibai.output; import com.yiibai.output.iOutputGenerator; public class OutPuthelper {iOutputGenerator outputGenerator; public void generateOutput () {OutputGenerator.GenerateOutput (); } public void setOutputGenerator (iOutputGenerator outputGenerator) {this.OutputGenerator = outputGenerator; }} Créez un fichier de configuration Spring Bean et déclarez toutes les dépendances d'objets Java ici.
<! - printemps-comon.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.5.xsd"> <bean id = "OutPuthelper"> <propriété name = "outputGenerator" ref = "csvoutputGenerator" /> </ bean> <bean id = "csvoutputGenerator" /> <bean id = "jsonoutputGenerator" /> </ beeans>
Appelez-le via le printemps
package com.yiibai.common; import org.springframework.context.applicationContext; import org.springframework.context.support.classpathxmlapplicationcontext; import com.yiibai.output.outputhelper; public class app {public static void main (String [] args) {applicationConcyt ClassPathxmlApplicationContext (new String [] {"Spring-Common.xml"}); OutPuthelPer output = (OutPuthelper) context.getBean ("OutPuthelper"); output.generateOutput (); }} Maintenant, modifiez simplement le fichier Spring XML à l'aide d'un générateur de sortie différent. Modifier uniquement les fichiers Spring XML sans modifications non censurées signifie moins d'erreurs.
Conclusion: Avec Spring Framework - Cette injection de dépendance (DI) est utile pour la gestion de la dépendance des objets, ce qui le rend plus élégant, très flexible et facile à maintenir dans la gestion du développement de grands projets Java.
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!