
Guten Tag!
Die Einladung, weiter zu
veröffentlichen, hat mich inspiriert
, also mache ich weiter.
Dieses Mal werden wir die Hauptoptionen für die Implementierung der Abhängigkeit betrachten - durch den Konstruktor und durch die Setter. Suchen Sie hier alle Quellen
Lektion 06. Implementierung durch den Konstruktor.
Nehmen Sie wieder das Projekt aus Lektion 2 als Grundlage.
Fügen Sie einen weiteren Dichter hinzu.
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" + ", , . "; } }
Registrieren Sie die Klasse in der Konfigurationsdatei
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>
Zu Beginn des 20. Jahrhunderts waren literarische Duelle sehr beliebt.
Wir werden ein literarisches Duell zwischen zwei Dichtern arrangieren. Erstellen Sie dazu die
Szene 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(" ."); } } }
Im Prinzip können Sie
src \ main \ java \ spring \ main \ Start.java ändern - und es wird funktionieren:
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();
Wir fangen an - alles funktioniert. Dichter gaben ein Meisterwerk heraus, das zweite gewann höchstwahrscheinlich. So sollte es sein, 27. Februar 1918 im Polytechnischen Museum bei der Wahl des Königs der Dichter Nordländer besiegte Mayakovsky. Aber wir haben Vladimir Vladimirovich eine kleine Chance gegeben. Vielleicht hat er in Ihrer Version gewonnen.
Jetzt nehmen wir alle Einstellungen in der Konfigurationsdatei
src \ main \ resources \ ApplicationContext.xml vor . Es lohnt sich nicht, die Beans in der Startdatei explizit zu konfigurieren.
<?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>
In der Regel werden Beans mit dem Standardkonstruktor ohne Argumente erstellt. Aber in unserem Fall wird es nicht funktionieren. Lassen Sie uns als Argumente Argumente an andere generierte Behälter von Mayakovsky und Severyanin weitergeben.
Es bleibt noch alles Unnötige aus der
Klasse src \ main \ java \ spring \ main \ Start.java zu entfernen
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();
Wir fangen an. Alles arbeitet. Bohnen werden erzeugt. Der Nordländer gewann erneut.
Jedenfalls in meiner Realität.
Nun wollen wir sehen, wie die Setter konfiguriert werden können.
Lektion 07. Implementierung durch Setter.
Wir quälen weiterhin das vorherige Projekt.
Es ist wahrscheinlich falsch, beim Erstellen einer Szene Dichter zu erstellen.
Korrigieren Sie dieses Versehen und ändern Sie die Klasse der Szene geringfügig. Entfernen wir den Konstruktor und fügen Sie Setter für lyr1 und lyr2 aus
src \ main \ java \ spring \ impls \ Stage.java hinzu 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(" ."); } } }
Ändern Sie die Konfigurationsdatei
src \ main \ resources \ ApplicationContext.xml . Wir entfernen die Konstruktorargumente und fügen die Setterwerte hinzu.
<?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>
Die Startklasse kann in diesem Fall nicht berührt werden. Wir fangen an. Alles arbeitet. Beachten Sie, dass der Konstruktor mit zwei Parametern nicht für die Szene startet, sondern nach dem Erstellen der Szene zwei Setter festgelegt werden.
Fortsetzung folgt…