Selamat siang
Saya menetapkan tujuan belajar kerangka kerja Musim Semi untuk bahasa Jawa. Selama penelitian, saya memutuskan untuk memeriksa sendiri algoritma pembelajaran Richard Feynman: mengatur-menyederhanakan-melatih yang lain. Secara umum, saya mulai merekam serangkaian pelajaran singkat untuk pemula yang bekerja di Spring. Bagi mereka yang ingin mengulang, saya meletakkan
kode sumber .
Pelajaran 01. Memahami IoC
Jadi, mari kita kumpulkan para penyair, biarkan mereka menulis dan membacakan puisi untuk kita.
Pertama, deklarasikan antarmuka yang menghasilkan ayat
src \ main \ java \ spring \ interfaces \ Lyricist.java:package spring.intarfaces; public interface Lyricist { public String Generate(); }
Kami mengimplementasikan antarmuka ini di kelas
src \ main \ java \ spring \ impls \ Mayakovsky.java :
package spring.impls; import spring.intarfaces.Lyricist; public class Mayakovsky implements Lyricist { @Override public String Generate() { return " \r\n" + " \r\n" + " \r\n" + " ?"; } }
Kami akan menulis bahwa kami akan membuat objek Mayakovsky spesifik dalam file konfigurasi xml
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.Mayakovsky"/> </beans>
Terkait id LyricistBean1 dengan nama kelas Mayakovsky. Hampir semuanya sudah siap, hanya kelas panggilan
src \ main \ java \ spring \ main \ Start.java yang hilang :
package spring.main; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import spring.intarfaces.Lyricist; public class Start { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Lyricist lyr1 = context.getBean("LyricistBean1", Lyricist.class); System.out.println(lyr1.Generate()); ((ConfigurableApplicationContext) context).close();
Di kelas Start, kita membaca file konfigurasi kita, membuat instance dari penyair bernama bean LyricistBean1. Punya salinan penyair Mayakovsky. Fungsi Generate () mengembalikan kepada kita string abadi:
Dan kamu
bermain nocturne
bisa
pada seruling pipa pembuangan?
Pelajaran 02. Memilih sebuah instance untuk dibuat melalui file konfigurasi
Katakanlah seorang teman membantu kami dan menyediakan implementasi
antarmuka Lyricist
src \ main \ java \ spring \ impls \ Poushkin.java kami yang lain :
package spring.impls; import spring.intarfaces.Lyricist; public class Poushkin implements Lyricist { @Override public String Generate() { return " :\r\n" + " ,\r\n" + " ,\r\n" + " ."; } }
Dalam file konfigurasi ApplicationContext.xml, ubah Mayakovsky ke Poushkin.
Jalankan programnya. Kami
mendapatkan hasil yang sama sekali berbeda
tanpa membangun kembali :
Saya ingat saat yang indah
Anda muncul di hadapanku
Seperti visi singkat
Seperti seorang jenius kecantikan murni.
Pelajaran 03. Kacang dalam kode, bukan dalam file konfigurasi
Misalkan kita tidak ingin memberikan pilihan kelas penyair yang kita buat
ke tangan takdir dalam file konfigurasi.
Ubah kelas Poushkin.java
- Tambahkan impor impor perpustakaan org.springframework.stereotype.Component;
- Letakkan anotasi Komponen ("LyricistBean1") sebelum deklarasi kelas
Jadi kami mengisyaratkan kepada Spring bahwa kami ingin melihat Poushkin dalam bentuk penyair pertama, dan bukan orang lain.
Tetap sedikit memperbaiki file konfigurasi ApplicationContext.xml:
1. Tambahkan konteks namespace: xmlns: context = "
www.springframework.org/schema/context ";
2. Hapus baris yang tidak perlu: />
3. Tambahkan perintah alih-alih untuk secara otomatis menambahkan nampan dari semua kelas yang terletak di direktori spring.impls ke program:
<context: component-scan base-package = "spring.impls" />
Akibatnya, file ApplicationContext.xml akan terlihat seperti ini:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <context:component-scan base-package="spring.impls"/> </beans>
Kita mulai. Kami mendapatkan hasil yang sama seperti pada pelajaran sebelumnya.
Pelajaran 04. Kelas Konfigurasi
Mari kita singkirkan file xml sekaligus.
Semua pengaturan juga bisa di kelas java. Terkadang itu nyaman.
Tambahkan kelas konfigurasi khusus
src \ main \ java \ spring \ main \ LyricistConfiguration.java ke program kami:
package spring.main; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @ComponentScan(basePackages = { "spring.impls" }) @Configuration public class LyricistConfiguration { }
@ComponentScan menunjukkan direktori tempat untuk mencari kacang.
@Configuration melaporkan bahwa kelas kami adalah konfigurasi khusus.
Itu saja, file xml tidak lagi diperlukan. Tetap melaporkan berita ini ke kelas utama kami:
- Tambahan dengan impor impor yang diperlukan org.springframework.context.annotation.AnnotationConfigApplicationContext;
- Ganti baris pembuatan konteks
ApplicationContext context = AnnotationConfigApplicationContext baru (LyricistConfiguration.class);
Akibatnya, file
src \ main \ java \ spring \ main \ Start.java utama akan terlihat seperti ini:
package spring.main; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import spring.intarfaces.Lyricist; public class Start { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(LyricistConfiguration.class); Lyricist lyr1 = context.getBean("LyricistBean1", Lyricist.class); System.out.println(lyr1.Generate()); ((ConfigurableApplicationContext) context).close();
Semuanya dimulai dan masih menghasilkan garis Pushkin abadi. Semuanya berfungsi. Tapi sudah tanpa xml.
Pelajaran 05. Singleton dan Prototipe
Jelajahi kemampuan file konfigurasi. Karena itu, mari kita kembali ke proyek dari pelajaran kedua. Mari kita coba untuk membuat dua instance dari kelas Poushkin di Start.java dan pastikan bahwa penyair hebat itu sama:
Lyricist lyr1 = context.getBean("LyricistBean1", Lyricist.class); System.out.println(lyr1.Generate()); System.out.println(lyr1.hashCode()); Lyricist lyr2 = context.getBean("LyricistBean1", Lyricist.class); System.out.println(lyr2.Generate()); System.out.println(lyr2.hashCode());
Dan ayat-ayatnya sama, dan kode hash turun. Semuanya baik-baik saja.
Tambahkan ke proyek kami warga sederhana yang tidak menulis ayat
src \ main \ java \ spring \ impls \ SimpleMan.java :
package spring.impls; import spring.intarfaces.Lyricist; public class SimpleMan implements Lyricist { @Override public String Generate() { return " , "; } }
Daftarkan kelas dalam file konfigurasi (segera setelah nampan pertama)
<bean id="LyricistBean2" class="spring.impls.SimpleMan"/>
Kami berusaha menciptakan
Lyricist lyr1 = context.getBean("LyricistBean2", Lyricist.class); System.out.println(lyr1.Generate()); System.out.println(lyr1.hashCode()); Lyricist lyr2 = context.getBean("LyricistBean2", Lyricist.class); System.out.println(lyr2.Generate()); System.out.println(lyr2.hashCode());
Warga negara adalah sama sepanjang waktu. Kekacauan ...
Ubah registrasi kacang di file konfigurasi dengan menambahkan kata ajaib scope = "prototype"
Akibatnya, file
src \ main \ resources \ ApplicationContext.xml akan terlihat seperti ini:
<?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" scope="singleton"/> <bean id="LyricistBean2" class="spring.impls.SimpleMan" scope="prototype"/> </beans>
Sekarang semuanya baik-baik saja. Warga berbeda setiap saat. Tapi Pushkin selalu sendirian.
Orang yang penuh perhatian memperhatikan bahwa pengaturan lingkup = "singleton" telah ditambahkan di nampan pertama, tetapi pengaturan ini digunakan secara default, jadi Anda tidak dapat menulisnya.
Itu saja untuk hari ini. Jika posting ini melewati moderasi, dan saya punya waktu dan energi, akan ada kelanjutan tentang AOP, JDBC, transaksi, MVC dan kebijakan lainnya.
Salam, Vladimir