JavaRush /Java Blog /Random-ID /Musim semi adalah untuk mereka yang malas. Dasar-dasar, k...
Стас Пасинков
Level 26
Киев

Musim semi adalah untuk mereka yang malas. Dasar-dasar, konsep dasar dan contoh dengan kode. Bagian 1

Dipublikasikan di grup Random-ID
Banyak orang, setelah membaca artikel saya tentang membuat template untuk proyek web dan tentang membuat layanan web sederhana menggunakan servlets , bertanya-tanya kapan saya akan menulis tentang Spring. Saya tidak mau, saya menyarankan membaca buku (dan saya tetap mengatakan bahwa satu buku lebih baik daripada 10, atau bahkan 100 artikel di Internet). Tapi sekarang saya telah memutuskan bahwa untuk menjelaskan hal yang sama kepada orang yang berbeda, saya menghabiskan lebih banyak waktu daripada jika saya duduk sekali dan menulis artikel, lalu hanya memposting link ke artikel tersebut. Jadi saya menulis demi tautannya)). Musim semi adalah untuk mereka yang malas.  Dasar-dasar, konsep dasar dan contoh dengan kode.  Bagian 1 - 1Pada artikel ini saya tidak akan menulis cara membuat proyek yang berfungsi di Spring dalam 5 menit mengikuti contoh saya. Saya hanya akan menulis tentang hal-hal mendasar, tanpa mengetahui hal apa saja yang mungkin untuk memulai sebuah proyek, tetapi apa yang terjadi di sana, dan, yang lebih penting, alasannya, tidak akan jelas.

Apa itu Kerangka Musim Semi?

Spring Framework , atau sederhananya Spring , adalah salah satu kerangka kerja paling populer untuk membuat aplikasi web di Java. Framework adalah sesuatu yang mirip dengan perpustakaan (mungkin istilah ini lebih familiar bagi Anda), tetapi ada satu hal. Secara kasar, dengan menggunakan perpustakaan, Anda cukup membuat objek dari kelas yang ada di dalamnya, memanggil metode yang Anda butuhkan, dan mendapatkan hasil yang Anda butuhkan. Artinya, ada pendekatan yang lebih penting: Anda dengan jelas menunjukkan dalam program Anda pada saat tertentu Anda perlu membuat objek yang mana, pada saat apa Anda perlu memanggil metode tertentu, dll. Dengan kerangka kerja, segalanya sedikit berbeda. Anda cukup menulis beberapa kelas Anda sendiri, menulis beberapa bagian logika di sana, dan kerangka itu sendiri membuat objek kelas Anda dan memanggil metode untuk Anda. Paling sering, kelas Anda mengimplementasikan beberapa antarmuka dari kerangka kerja atau mewarisi beberapa kelas darinya, sehingga menerima beberapa fungsi yang sudah ditulis untuk Anda. Tapi tidak harus seperti itu. Di Spring, misalnya, mereka mencoba untuk menjauh dari penggabungan ketat sebanyak mungkin (ketika kelas Anda secara langsung bergantung pada beberapa kelas/antarmuka dari kerangka kerja ini), dan menggunakan anotasi untuk tujuan ini. Kami akan kembali ke titik ini nanti. Namun penting untuk dipahami bahwa Spring hanyalah kumpulan dari beberapa kelas dan antarmuka yang telah ditulis untuk Anda :) Saya juga ingin segera mencatat bahwa Spring dapat digunakan tidak hanya untuk aplikasi web, tetapi juga untuk konsol yang paling umum. aplikasi yang begitu familiar bagi kita semua program Dan hari ini kami bahkan akan menulis sesuatu seperti itu.

Struktur

Namun Spring bukanlah kerangka kerja yang spesifik. Ini adalah nama umum untuk sejumlah kerangka kerja kecil, yang masing-masing melakukan tugas berbeda.
Musim semi adalah untuk mereka yang malas.  Dasar-dasar, konsep dasar dan contoh dengan kode.  Bagian 1 - 2
Seperti yang Anda lihat, pegas memiliki struktur modular. Hal ini memungkinkan kita untuk menghubungkan hanya modul-modul yang kita perlukan untuk aplikasi kita dan tidak menghubungkan modul-modul yang jelas-jelas tidak akan kita gunakan. Sejauh yang saya tahu, pendekatan inilah yang membantu Spring mengungguli pesaingnya saat itu (EJB) dan memimpin. Karena aplikasi yang menggunakan EJB menarik banyak ketergantungan, dan secara umum aplikasi tersebut menjadi lambat dan kikuk. Gambar menunjukkan bahwa kerangka pegas terdiri dari beberapa modul:
  • akses data;
  • jaringan;
  • inti;
  • dan lain-lain.
Hari ini kita akan mengenal beberapa konsep modul utama, seperti: beans, konteks dan lain-lain. Seperti yang Anda duga, modul akses data berisi alat untuk bekerja dengan data (terutama database), web - untuk bekerja di jaringan (termasuk untuk membuat aplikasi web, yang akan dibahas nanti). Selain itu, ada juga yang disebut infrastruktur Spring keseluruhan: banyak proyek lain yang tidak secara resmi disertakan dalam kerangka kerja itu sendiri, namun terintegrasi dengan mulus ke dalam proyek Spring Anda (misalnya, keamanan pegas yang sama untuk bekerja dengan otorisasi pengguna di proyek Spring). situs, yang saya harap, kita juga akan merasakannya suatu hari nanti).

Mengapa Musim Semi di Jawa?

Nah, selain modis, penuh gaya, dan berjiwa muda, saya dapat langsung mengatakan bahwa segera setelah Anda menguasainya sedikit pun, Anda akan memahami betapa banyak pekerjaan berbeda yang tidak perlu Anda lakukan sekarang, dan betapa banyak Musim Semi. mengambil. Anda dapat menulis beberapa lusin baris konfigurasi, menulis beberapa kelas - dan Anda akan mendapatkan proyek yang berfungsi. Tapi segera setelah Anda mulai berpikir tentang berapa banyak yang ada “di bawah tenda”, berapa banyak pekerjaan yang dilakukan, dan berapa banyak kode yang harus ditulis jika Anda melakukan proyek yang sama pada servlet kosong atau pada soket dan Java murni. - rambutmu berdiri tegak :) Bahkan ada ungkapan seperti "keajaiban" Musim Semi. Ini adalah saat Anda melihat bahwa semuanya berfungsi, tetapi Anda memperkirakan secara kasar berapa banyak yang harus terjadi di sana agar semuanya berfungsi dan bagaimana semuanya bekerja di sana - maka tampaknya semua ini benar-benar terjadi berkat semacam sihir)) Lebih mudah untuk melakukannya sebut saja semuanya ajaib daripada mencoba menjelaskan bagaimana semuanya saling berhubungan di sana. tersenyum data_ web-mvc_ security_ hanya dasar-dasarnya.

DI/IoC

Jika Anda mencoba membaca sesuatu di Spring, hal pertama yang Anda temukan mungkin adalah surat-surat ini: DI/IoC . Sekarang saya sangat menyarankan Anda istirahat dari artikel ini dan membaca artikel di Habré ini ! IoC (Inversi Kontrol) - inversi kontrol. Saya sudah menyebutkan ini secara sepintas ketika saya menulis bahwa ketika menggunakan perpustakaan, Anda sendiri yang menulis dalam kode Anda metode objek mana yang akan dipanggil, dan dalam kasus kerangka kerja, paling sering kerangka kerja akan memanggil kode yang Anda tulis di sebelah kanan. momen. Artinya, di sini Anda tidak lagi mengontrol proses eksekusi kode/program, tetapi framework yang melakukannya untuk Anda. Anda mentransfer kendali kepadanya (inversi kendali). DI dipahami sebagai Inversi Ketergantungan (inversi ketergantungan, yaitu , upaya untuk tidak membuat koneksi keras antara modul/kelas Anda, di mana satu kelas terikat langsung ke kelas lain), atau Injeksi Ketergantungan (injeksi ketergantungan, ini adalah saat objek cat tidak dibuat oleh Anda di main dan kemudian Anda meneruskannya ke metode Anda, dan Spring menciptakannya untuk Anda, dan Anda cukup memberi tahu dia sesuatu seperti "Saya ingin memelihara kucing di sini" dan dia meneruskannya kepada Anda dalam metode Anda). Yang kedua akan lebih sering kita temui di artikel selanjutnya.

Kacang dan konteks

Salah satu konsep kunci di musim semi adalah kacang . Intinya, ini hanyalah objek dari suatu kelas. Katakanlah untuk program kita, kita perlu menggunakan 3 objek: kucing, anjing, dan burung beo. Dan kita mempunyai banyak kelas dengan banyak metode, yang terkadang kita memerlukan kucing untuk suatu metode, dan seekor anjing untuk metode lainnya, dan terkadang kita akan memiliki metode yang memerlukan kucing dan burung beo (misalnya, sebuah metode untuk memberi makan kucing, hehe), dan dalam beberapa metode, ketiga benda tersebut akan dibutuhkan. Ya, pertama-tama kita dapat membuat ketiga objek ini di objek utama, dan kemudian meneruskannya ke kelas kita, dan dari dalam kelas ke metode yang kita perlukan... Dan seterusnya di seluruh program. Dan jika kita juga membayangkan bahwa secara berkala kita ingin mengubah daftar parameter yang diterima untuk metode kita (yah, kita memutuskan untuk menulis ulang sesuatu atau menambahkan fungsionalitas) - maka kita harus melakukan banyak pengeditan pada kode jika perlu. mengubah sesuatu. Sekarang, bagaimana jika kita membayangkan bahwa kita tidak mempunyai 3, melainkan 300 benda seperti itu? Alternatifnya adalah dengan mengumpulkan semua objek tersebut ke dalam satu daftar objek umum ( List<Object> ) dan menyebarkannya ke semua metode, dan dari dalam metode dapatkan objek ini atau itu yang kita perlukan. Tapi bagaimana jika kita membayangkan bahwa seiring berjalannya program, beberapa objek mungkin ditambahkan ke daftar ini, atau (yang lebih buruk) dihapus? Kemudian di semua metode di mana kita mengambil objek dari daftar berdasarkan indeksnya, semuanya bisa rusak. Kemudian kita memutuskan untuk menyimpan bukan daftar, tetapi peta, di mana kuncinya adalah nama objek yang kita butuhkan, dan nilainya adalah objek itu sendiri, dan kemudian kita bisa mendapatkan objek yang kita butuhkan hanya dengan namanya. : get("parrot") dan sebagai tanggapan kami menerima objek burung beo Atau, misalnya kuncinya adalah kelas dari objek tersebut, dan nilainya adalah objek itu sendiri, maka kita tidak dapat lagi menunjukkan nama objek tersebut, tetapi hanya kelas dari objek yang kita perlukan, yang juga nyaman. Atau bahkan menulis semacam pembungkus di atas peta, di mana Anda bisa membuat metode sehingga dalam beberapa kasus Anda bisa mengambil objek berdasarkan namanya, dan dalam kasus lain berdasarkan kelasnya. Inilah yang kami dapatkan dari konteks aplikasi pegas . Konteks adalah sekumpulan kacang (objek). Beralih ke konteksnya, kita bisa mendapatkan bean (objek) yang kita perlukan berdasarkan namanya, misalnya, atau berdasarkan tipenya, atau yang lainnya. Selain itu, kita dapat meminta Spring untuk mencari kacang yang kita perlukan dalam konteksnya dan meneruskannya ke metode kita. Misalnya, jika kita mempunyai metode seperti ini:
public void doSomething(Cat cat) {
    ...
}
Ketika Spring memanggil metode ini untuk kita, ia meneruskan objek kucing kita dari konteksnya ke dalamnya. Sekarang kami memutuskan bahwa metode kami, selain kucing, juga membutuhkan burung beo. Menggunakan pegas - tidak ada yang lebih mudah bagi kami! Kami cukup menulis:
public void doSomething(Cat cat, Parrot parrot) {
    ...
}
dan Spring, ketika memanggil metode kita ini, akan memahami bahwa kita perlu melewatkan seekor kucing dan burung beo di sini, menuju ke konteksnya, mendapatkan kedua objek ini dan meneruskannya ke metode kita. Dengan menyerahkan kendali program kami ke Spring, kami juga mengalihkan kepadanya tanggung jawab untuk membuat objek dan meneruskannya ke metode kami, yang akan dia panggil. Timbul pertanyaan: bagaimana Spring mengetahui objek (tempat sampah) mana yang akan dibuat?

Metode Konfigurasi Aplikasi

Ada tiga cara utama untuk mengonfigurasi aplikasi (yaitu, memberi tahu Spring objek mana yang perlu kita kerjakan):
  1. menggunakan file/konfigurasi xml;
  2. menggunakan konfigurasi Java;
  3. konfigurasi otomatis.
Pengembang musim semi mengaturnya dalam urutan prioritas berikut:
  • metode prioritas utama yang harus diprioritaskan adalah konfigurasi otomatis;
  • jika menggunakan konfigurasi otomatis tidak mungkin untuk mengkonfigurasi dengan benar semua kemungkinan kacang, gunakan konfigurasi Java (membuat objek menggunakan kode Java);
  • Nah, cara dengan prioritas paling rendah adalah cara lama, menggunakan konfigurasi xml.
Selain itu, Spring memungkinkan Anda menggabungkan metode ini. Misalnya, biarkan Spring melakukan segala sesuatu yang dapat dikonfigurasi secara otomatis; di mana Anda perlu menentukan beberapa parameter khusus, melakukannya menggunakan konfigurasi Java, dan sebagai tambahan, Anda dapat menghubungkan beberapa konfigurasi lama dalam format xml. Secara umum, semua ini dapat dilakukan dengan cukup fleksibel. Tapi tetap saja, jika semuanya bisa dilakukan dengan pengaturan otomatis, gunakanlah. Saya hanya akan mempertimbangkan konfigurasi otomatis dan konfigurasi Java; Konfigurasi xml sudah digunakan di hampir setiap contoh Spring di Internet, dan setelah Anda memahami cara kerja konfigurasi Java, seharusnya tidak ada masalah "membaca" file xml yang melakukan hal yang sama. Konfigurasi otomatis digunakan ketika objek yang kita perlukan untuk bekerja adalah objek kelas yang telah kita tulis . Jika logika yang sangat spesifik diperlukan untuk membuat objek kelas kita, atau jika kita tidak memiliki kesempatan untuk menandai kelas tertentu dengan anotasi yang kita perlukan, yang akan diambil oleh konfigurasi otomatis, ini dapat dilakukan di konfigurasi Java . Pada bagian selanjutnya , kita akan membuat proyek maven, menghubungkan beberapa modul pegas pusat ke dalamnya dan membuat kacang pertama kita.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION