
Bon après-midi
J'ai été inspiré par l'invitation à continuer de
publier, alors je continue.
Cette fois, nous examinerons les principales options pour implémenter la dépendance - à travers le constructeur et à travers les setters. Recherchez toutes les sources
iciLeçon 06. Mise en œuvre via le constructeur.
Encore une fois, prenez le projet de la leçon 2 comme base.
Ajoutez un autre poète.
src \ main \ java \ spring \ impls \ Severyanin.javapackage spring.impls; import spring.intarfaces.Lyricist; public class Severyanin implements Lyricist { @Override public String Generate() { return " , ,\r\n" + " …\r\n" + " — — ,\r\n" + ", , . "; } }
Enregistrez la classe dans le fichier de configuration
src \ main \ resources \ ApplicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="LyricistBean1" class="spring.impls.Poushkin"/> <bean id="LyricistBean2" class="spring.impls.Mayakovsky"/> <bean id="LyricistBean3" class="spring.impls.Severyanin"/> </beans>
Au début du XXe siècle, les duels littéraires sont très populaires.
Nous organiserons un duel littéraire entre deux poètes. Pour ce faire, créez la scène
src \ main \ java \ spring \ impls \ Stage.java package spring.impls; import spring.intarfaces.Lyricist; public class Stage { private Lyricist lyr1; private Lyricist lyr2; public Stage(Lyricist lyr1, Lyricist lyr2) { this.lyr1 = lyr1; this.lyr2 = lyr2; } public void Act() { System.out.println(" :"); System.out.println(lyr1.Generate()); System.out.println(); System.out.println(" :"); System.out.println(lyr2.Generate()); System.out.println(); System.out.print(" "); if (Math.random() < 0.1) { System.out.println(" ."); } else { System.out.println(" ."); } } }
En principe, vous pouvez modifier
src \ main \ java \ spring \ main \ Start.java - et cela fonctionnera:
package spring.main; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import spring.impls.Stage; import spring.intarfaces.Lyricist; public class Start { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Lyricist lyr1 = context.getBean("LyricistBean2", Lyricist.class); Lyricist lyr2 = context.getBean("LyricistBean3", Lyricist.class); Stage myStage = new Stage(lyr1, lyr2); myStage.Act(); ((ConfigurableApplicationContext) context).close();
Nous commençons - tout fonctionne. Les poètes ont publié un chef-d'œuvre, le deuxième, très probablement, a gagné. Il devrait donc en être ainsi, le 27 février 1918, au Musée polytechnique lors de l'élection du roi des poètes nordistes, vaincu Mayakovsky. Mais nous avons donné à Vladimir Vladimirovitch une petite chance. Peut-être que dans votre version, il a gagné.
Maintenant, nous allons faire tous les paramètres dans le fichier de configuration
src \ main \ resources \ ApplicationContext.xml , cela ne vaut pas la peine de configurer explicitement les beans dans le fichier de démarrage.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="LyricistBean1" class="spring.impls.Poushkin"/> <bean id="LyricistBean2" class="spring.impls.Mayakovsky"/> <bean id="LyricistBean3" class="spring.impls.Severyanin"/> <bean id="StageBean" class="spring.impls.Stage"> <constructor-arg ref="LyricistBean2" /> <constructor-arg ref="LyricistBean3" /> </bean> </beans>
En règle générale, les beans sont créés avec le constructeur par défaut sans arguments. Mais dans notre cas, cela ne fonctionnera pas. Passons comme arguments des arguments à d'autres bacs générés de Mayakovsky et Severyanin.
Il reste à supprimer tous les inutiles de la
classe src \ main \ java \ spring \ main \ Start.java package spring.main; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import spring.impls.Stage; public class Start { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Stage myStage = context.getBean("StageBean", Stage.class); myStage.Act(); ((ConfigurableApplicationContext) context).close();
Nous commençons. Tout fonctionne. Des haricots sont créés. Le nordiste a encore gagné.
Quoi qu'il en soit, dans ma réalité.
Voyons maintenant comment configurer les setters.
Leçon 07. Mise en œuvre par les setters.
Nous continuons à tourmenter le projet précédent.
Il est probablement faux de créer des poètes lors de la création d'une scène.
Corrigez cet oubli et changez légèrement la classe de la scène. Supprimons le constructeur et ajoutons des paramètres pour lyr1 et lyr2 de
src \ main \ java \ spring \ impls \ Stage.java package spring.impls; import spring.intarfaces.Lyricist; public class Stage { private Lyricist lyr1; private Lyricist lyr2; public void setLyr1(Lyricist lyr1) { this.lyr1 = lyr1; } public void setLyr2(Lyricist lyr2) { this.lyr2 = lyr2; } public void Act() { System.out.println(" :"); System.out.println(lyr1.Generate()); System.out.println(); System.out.println(" :"); System.out.println(lyr2.Generate()); System.out.println(); System.out.print(" "); if (Math.random() < 0.1) { System.out.println(" ."); } else { System.out.println(" ."); } } }
Modifiez le fichier de configuration
src \ main \ resources \ ApplicationContext.xml . Nous supprimons les arguments du constructeur et ajoutons les valeurs de définition.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="LyricistBean1" class="spring.impls.Poushkin"/> <bean id="LyricistBean2" class="spring.impls.Mayakovsky"/> <bean id="LyricistBean3" class="spring.impls.Severyanin"/> <bean id="StageBean" class="spring.impls.Stage"> <property name="lyr1" ref="LyricistBean2"></property> <property name="lyr2" ref="LyricistBean3"></property> </bean> </beans>
La classe de départ dans ce cas ne peut pas être touchée. Nous commençons. Tout fonctionne. Notez que le constructeur avec deux paramètres ne démarre pas pour la scène, mais après avoir créé la scène, deux setters sont définis.
À suivre ...