
Selamat siang
Saya terinspirasi oleh undangan untuk terus
menerbitkan, jadi saya melanjutkan.
Kali ini kami akan mempertimbangkan opsi utama untuk menerapkan ketergantungan - melalui konstruktor dan melalui setter. Cari semua sumber
di siniPelajaran 06. Implementasi melalui konstruktor.
Sekali lagi, ambil proyek dari pelajaran 2 sebagai dasar.
Tambahkan penyair lain.
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" + ", , . "; } }
Daftarkan kelas di file konfigurasi
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>
Pada awal abad kedua puluh, duel sastra sangat populer.
Kami akan mengatur duel sastra antara dua penyair. Untuk melakukan ini, buat
adegan 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(" ."); } } }
Pada prinsipnya, Anda dapat mengubah
src \ main \ java \ spring \ main \ Start.java - dan itu akan bekerja:
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();
Kami mulai - semuanya bekerja. Penyair mengeluarkan satu karya, yang kedua, kemungkinan besar, menang. Seharusnya, 27 Februari 1918 di Museum Politeknik di Pemilihan Raja Penyair Northerner mengalahkan Mayakovsky. Tapi kami memberi Vladimir Vladimirovich peluang kecil. Mungkin dalam versi Anda dia menang.
Sekarang kita akan membuat semua pengaturan di file konfigurasi
src \ main \ resources \ ApplicationContext.xml , tidak layak mengkonfigurasi secara eksplisit kacang di file mulai.
<?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>
Biasanya, kacang dibuat dengan konstruktor default tanpa argumen. Tetapi dalam kasus kami, itu tidak akan berhasil. Mari kita berikan sebagai argumen argumen ke tempat sampah lain yang dihasilkan dari Mayakovsky dan Severyanin.
Tetap menghapus semua yang tidak perlu dari kelas
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();
Kita mulai. Semuanya berfungsi. Kacang dibuat. Orang utara itu menang lagi.
Bagaimanapun, dalam kenyataan saya.
Sekarang mari kita lihat bagaimana setter dapat dikonfigurasi.
Pelajaran 07. Implementasi melalui setter.
Kami terus menyiksa proyek sebelumnya.
Mungkin salah untuk membuat penyair saat membuat adegan.
Perbaiki kesalahan ini dan sedikit mengubah kelas adegan. Mari kita hapus konstruktor dan tambahkan setter untuk lyr1 dan lyr2 dari
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(" ."); } } }
Ubah file konfigurasi
src \ main \ resources \ ApplicationContext.xml . Kami menghapus argumen konstruktor dan menambahkan nilai-nilai setter.
<?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>
Kelas awal dalam hal ini tidak dapat disentuh. Kita mulai. Semuanya berfungsi. Perhatikan bahwa konstruktor dengan dua parameter tidak dimulai untuk adegan, tetapi setelah membuat adegan, dua setter diatur.
Dilanjutkan ...