Halo, warga Habrovsk! Akhir pekan yang panjang telah berakhir, yang berarti inilah saatnya untuk membagikan terjemahan baru yang bermanfaat. Hari ini kita akan berbicara tentang pola desain yang digunakan dalam Kerangka Kerja Musim Semi. Seperti yang mungkin sudah Anda duga, materi ini didedikasikan untuk dimulainya perekrutan grup baru dalam kursus "Developer for Spring Framework" , yang dimulai pada 28 Mei. Mari kita mulai.

Pada artikel ini, kami akan meninjau beberapa pola desain yang banyak digunakan dalam Kerangka Pegas. Pola desain menggambarkan teknik pemrograman dalam pengembangan perangkat lunak berorientasi objek.
Berikut adalah beberapa pola terkenal yang digunakan dalam Kerangka Kerja Musim Semi:
- Proksi (Wakil)
- Singleton
- Pabrik
- Templat
- Pengontrol Tampilan Model
- Pengontrol Depan
- Lihat Pembantu
- Dependency injection dan Inversion of control (IoC) (Injeksi ketergantungan dan inversi kontrol)
- Pencari Lokasi Layanan
- Pengamat-Teramati
- Objek Konteks
Proksi (Wakil)
Pola proxy banyak digunakan dalam AOP dan remoting .
Contoh yang baik menggunakan Proxy adalah org.springframework.aop.framework.ProxyFactoryBean .
Pabrik ini membuat proksi AOP berdasarkan pada kacang Spring.
Proxy menyediakan pengganti untuk objek lain untuk mengontrol akses ke sana.
Baca lebih lanjut tentang Proxy di sini .
Singleton
Pola Singleton memastikan bahwa hanya satu instance objek yang ada dalam memori yang akan menyediakan layanan.
Di Spring, lingkup bean (lingkup) adalah singleton secara default dan wadah IoC membuat persis satu contoh objek pada wadah Spring IoC.
Kontainer Spring akan menyimpan instance tunggal ini dalam cache bin tunggal, dan semua permintaan dan tautan berikutnya untuk bin ini akan menerima objek yang di-cache.
Dianjurkan untuk menggunakan ruang lingkup tunggal untuk kacang stateless.
Ruang lingkup kacang dapat didefinisikan sebagai singleton
atau sebagai prototype
(contoh baru dibuat dengan setiap permintaan kacang).
Contoh konfigurasi dalam file xml:
<bean id = "..." class = "..." scope = "singleton/prototype"> </bean>
Anda dapat membaca lebih lanjut tentang Singleton di sini .
Pabrik
Pola ini memungkinkan Anda untuk menginisialisasi objek melalui metode statis publik yang disebut metode pabrik.
Spring menggunakan pola Factory untuk membuat objek bean menggunakan dua pendekatan berikut.
Wadah lain hadir di Spring yang menambahkan fitur khusus perusahaan. Fitur-fitur ini termasuk kemampuan untuk membaca parameter dari file properti dan menerbitkan acara aplikasi untuk pendengar acara.
Antarmuka org.springframework.context.ApplicationContext
digunakan untuk bekerja dengan wadah ini.
Berikut ini adalah implementasi ApplicationContext
paling umum digunakan.
FileSystemXmlApplicationContext
- dalam konstruktor Anda harus menentukan path lengkap ke file XML dengan konfigurasi kacang.
ClassPathXmlApplicationContext
- Anda harus meletakkan file XML dengan konfigurasi bean di CLASSPATH.
XmlWebApplicationContext
- Memuat file XML dengan XmlWebApplicationContext
metadata dalam aplikasi web.
Contoh:
package com.eduonix.springframework.applicationcontext; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class App { public static void main(String[] args) { ApplicationContext context = new FileSystemXmlApplicationContext( "C:/work/IOC Containers/springframework.applicationcontext/src/main/resources/bean-factory-config.xml"); HelloApplicationContext obj = (HelloApplicationContext) context.getBean("helloApplicationContext"); obj.getMsg(); } }
Untuk lebih memahami hal ini, mari kita lihat contoh dunia nyata. Konfigurasi pertama:
<bean id="welcomerBean" class="com.mysite.Welcomer" factory-method="createWelcomer"> <constructor-arg ref="messagesLocator"></constructor-arg> </bean> <bean id="messagesLocator" class="com.mysite.MessageLocator"> <property name="messages" value="messages_file.properties"></property> </bean>
Dan sekarang kacang:
public class Welcomer { private String message; public Welcomer(String message) { this.message = message; } public static Welcomer createWelcomer(MessageLocator messagesLocator) { Calendar cal = Calendar.getInstance(); String msgKey = "welcome.pm"; if (cal.get(Calendar.AM_PM) == Calendar.AM) { msgKey = "welcome.am"; } return new Welcomer(messagesLocator.getMessageByKey(msgKey)); } }
Anda dapat membaca lebih lanjut tentang Pabrik di sini .
Templat
Pola ini banyak digunakan untuk bekerja dengan kode pelat berulang (seperti menutup koneksi, dll.).
Misalnya, JdbcTemplate , JmsTemplate , JpaTemplate ( Catatan penerjemah: JpaTemplate telah ditinggalkan sejak Musim Semi 3.1 ).
Anda dapat membaca lebih lanjut tentang Templat di sini .
Pengontrol Tampilan Model
Keuntungan Spring MVC adalah bahwa pengontrol Anda adalah POJO, bukan servlet. Ini membuat pengontrol pengujian lebih mudah. Perlu dicatat bahwa pengendali hanya perlu mengembalikan nama logis dari tampilan, dan pilihan tampilan diserahkan kepada ViewResolver
. Ini memfasilitasi penggunaan kembali pengontrol untuk berbagai opsi presentasi.
Anda dapat membaca lebih lanjut tentang Pengendali Tampilan Model di sini .
Pengontrol Depan
Spring menyediakan DispatcherServlet untuk memastikan bahwa permintaan yang masuk dikirim ke pengontrol Anda.
Pola Front Controller digunakan untuk menyediakan mekanisme pemrosesan permintaan terpusat, sehingga semua permintaan diproses oleh penangan tunggal. Handler ini dapat mengotentikasi, mengotorisasi, mendaftar, atau melacak permintaan, dan kemudian meneruskan permintaan tersebut ke pengontrol yang sesuai.
Anda dapat membaca lebih lanjut tentang Front Controller di sini .
Lihat Pembantu
Spring memiliki beberapa tag JSP dan makro Velocity khusus untuk membantu memisahkan kode dari presentasi.
View Helper memisahkan konten statis dalam tampilan, seperti JSP, dari pemrosesan logika bisnis.
Kerangka kerja seperti Spring dan Struts menyediakan pustaka tag mereka sendiri untuk merangkum logika pemrosesan dalam helper alih-alih menempatkan logika dalam tampilan seperti file JSP.
Anda dapat membaca lebih lanjut tentang View Helper di sini .
Ketergantungan injeksi dan inversi kontrol (IOC) (injeksi ketergantungan dan inversi kontrol)
Wadah IoC Spring bertanggung jawab untuk membuat objek, menghubungkan objek bersama, mengkonfigurasi objek, dan menangani seluruh siklus hidup mereka dari penciptaan hingga kehancuran total.
Wadah Pegas menggunakan Dependency Injection (DI) untuk mengontrol komponen aplikasi. Komponen-komponen ini disebut Spring Beans.
Anda dapat membaca lebih lanjut tentang Injeksi Ketergantungan di sini .
Pencari Lokasi Layanan
ServiceLocatorFactoryBean
menyimpan informasi tentang semua kacang dalam konteks. Ketika kode klien meminta layanan (kacang) dengan nama, itu hanya menemukan komponen ini dalam konteks dan mengembalikannya. Kode klien tidak perlu menulis kode terkait Spring untuk menemukan kacang.
Pola Service Locator digunakan ketika kami ingin menemukan berbagai layanan menggunakan JNDI. Mengingat tingginya biaya pencarian layanan di JNDI, Service Locator menggunakan caching. Ketika suatu layanan diminta untuk pertama kalinya, Service Locator mencarinya di JNDI dan cache objek. Pencarian lebih lanjut untuk layanan yang sama melalui Penentu Lokasi Layanan dilakukan dalam cache, yang secara signifikan meningkatkan kinerja aplikasi.
Anda dapat membaca lebih lanjut tentang Pencari Layanan di sini .
Pengamat-Teramati
Digunakan dalam mesin acara ApplicationContext
.
Menentukan hubungan satu-ke-banyak antara objek sehingga ketika keadaan satu objek berubah, semua pelanggannya diberitahu dan diperbarui secara otomatis.
Anda dapat membaca lebih lanjut tentang Pengamat di sini .
Objek Konteks
Pola Objek Konteks merangkum data sistem dalam objek konteks untuk dibagikan oleh bagian lain dari aplikasi tanpa mengikat aplikasi ke protokol tertentu.
ApplicationContext adalah antarmuka pusat dalam aplikasi Spring untuk memberikan informasi konfigurasi aplikasi.
Anda dapat membaca lebih lanjut tentang Objek Konteks di sini .
Referensi
https://stackoverflow.com/questions/755563/what-design-patterns-are-used-in-spring-framework
Di sini ada bahan seperti itu. Kami menunggu komentar Anda dan diundang ke webinar gratis , di mana kami akan mengembangkan aplikasi Web klasik lengkap dengan UI, otentikasi, dan otorisasi. Kami juga akan mempelajari fitur aplikasi Web dan mencoba menyelesaikan beberapa masalah Enterprise yang mana. Webinar akan diadakan hari ini.