CodeGym /Java Blog /Acak /Dasar musim semi untuk orang malas, konsep dasar, dan con...
John Squirrels
Level 41
San Francisco

Dasar musim semi untuk orang malas, konsep dasar, dan contoh dengan kode. Bagian 1

Dipublikasikan di grup Acak
Dasar musim semi untuk orang malas, konsep dasar, dan contoh dengan kode.  Bagian 1 - 1Pada artikel ini, saya tidak akan memberi tahu Anda cara menjalankan proyek Spring yang berfungsi dan berjalan dalam 5 menit menggunakan kode saya. Saya hanya akan menulis dasar-dasarnya — hal-hal yang mungkin Anda abaikan dan masih membuat proyek. Namun dalam artikel ini, Anda masih belum mengerti apa yang terjadi dan, yang lebih penting, mengapa.

Apa itu Spring Framework?

Spring Framework, atau hanya Spring, adalah salah satu framework paling populer untuk membuat aplikasi web di Java. Framework itu seperti library (mungkin kamu lebih familiar dengan istilah ini), tapi ada yang perlu diperhatikan. Secara kasar, ketika Anda menggunakan perpustakaan, Anda cukup membuat instance dari kelas yang ada di dalamnya, memanggil metode yang Anda butuhkan, dan dengan demikian mendapatkan hasil yang Anda butuhkan. Dengan kata lain, ini adalah pendekatan yang lebih penting: dalam program Anda, Anda secara eksplisit menunjukkan momen spesifik ketika Anda perlu membuat objek mana, kapan harus memanggil metode spesifik mana, dll. Dengan kerangka kerja, semuanya sedikit berbeda. Anda cukup menulis beberapa kelas Anda sendiri dan menulis beberapa logika di dalamnya, tetapi kemudian kerangka kerja itu sendiri membuat instance kelas Anda dan memanggil metodenya. Kelas Anda biasanya mengimplementasikan beberapa antarmuka dari kerangka kerja atau mewarisi beberapa kelasnya, sehingga memberi Anda beberapa fungsi yang telah ditulis untuk Anda. Tapi ini tidak selalu terjadi. Misalnya, Spring mencoba sebisa mungkin untuk menghindari penggabungan yang begitu ketat (di mana kelas Anda secara langsung bergantung pada kelas/antarmuka dalam kerangka kerja). Ini menggunakan anotasi untuk mencapai ini. Kami akan kembali ke ini nanti. Tetapi penting untuk dipahami bahwa Spring hanyalah kumpulan kelas dan antarmuka yang tersedia untuk Anda gunakan :) Saya juga ingin segera mencatat bahwa Spring dapat digunakan tidak hanya untuk aplikasi web, tetapi juga untuk program konsol yang paling umum yang sangat familiar bagi kita semua. Dan kami bahkan akan menulis salah satunya hari ini. sehingga memberi Anda beberapa fungsi yang telah ditulis untuk Anda. Tapi ini tidak selalu terjadi. Misalnya, Spring mencoba sebisa mungkin untuk menghindari penggabungan yang begitu ketat (di mana kelas Anda secara langsung bergantung pada kelas/antarmuka dalam kerangka kerja). Ini menggunakan anotasi untuk mencapai ini. Kami akan kembali ke ini nanti. Tetapi penting untuk dipahami bahwa Spring hanyalah kumpulan kelas dan antarmuka yang tersedia untuk Anda gunakan :) Saya juga ingin segera mencatat bahwa Spring dapat digunakan tidak hanya untuk aplikasi web, tetapi juga untuk program konsol yang paling umum yang sangat familiar bagi kita semua. Dan kami bahkan akan menulis salah satunya hari ini. sehingga memberi Anda beberapa fungsi yang telah ditulis untuk Anda. Tapi ini tidak selalu terjadi. Misalnya, Spring mencoba sebisa mungkin untuk menghindari penggabungan yang begitu ketat (di mana kelas Anda secara langsung bergantung pada kelas/antarmuka dalam kerangka kerja). Ini menggunakan anotasi untuk mencapai ini. Kami akan kembali ke ini nanti. Tetapi penting untuk dipahami bahwa Spring hanyalah kumpulan kelas dan antarmuka yang tersedia untuk Anda gunakan :) Saya juga ingin segera mencatat bahwa Spring dapat digunakan tidak hanya untuk aplikasi web, tetapi juga untuk program konsol yang paling umum yang sangat familiar bagi kita semua. Dan kami bahkan akan menulis salah satunya hari ini. Spring mencoba sebisa mungkin untuk menghindari penggabungan yang begitu ketat (di mana kelas Anda secara langsung bergantung pada kelas/antarmuka dalam kerangka kerja). Ini menggunakan anotasi untuk mencapai ini. Kami akan kembali ke ini nanti. Tetapi penting untuk dipahami bahwa Spring hanyalah kumpulan kelas dan antarmuka yang tersedia untuk Anda gunakan :) Saya juga ingin segera mencatat bahwa Spring dapat digunakan tidak hanya untuk aplikasi web, tetapi juga untuk program konsol yang paling umum yang sangat familiar bagi kita semua. Dan kami bahkan akan menulis salah satunya hari ini. Spring mencoba sebisa mungkin untuk menghindari penggabungan yang begitu ketat (di mana kelas Anda secara langsung bergantung pada kelas/antarmuka dalam kerangka kerja). Ini menggunakan anotasi untuk mencapai ini. Kami akan kembali ke ini nanti. Tetapi penting untuk dipahami bahwa Spring hanyalah kumpulan kelas dan antarmuka yang tersedia untuk Anda gunakan :) Saya juga ingin segera mencatat bahwa Spring dapat digunakan tidak hanya untuk aplikasi web, tetapi juga untuk program konsol yang paling umum yang sangat familiar bagi kita semua. Dan kami bahkan akan menulis salah satunya hari ini. ) Saya juga ingin segera mencatat bahwa Spring dapat digunakan tidak hanya untuk aplikasi web, tetapi juga untuk program konsol paling umum yang sangat familiar bagi kita semua. Dan kami bahkan akan menulis salah satunya hari ini. ) Saya juga ingin segera mencatat bahwa Spring dapat digunakan tidak hanya untuk aplikasi web, tetapi juga untuk program konsol paling umum yang sangat familiar bagi kita semua. Dan kami bahkan akan menulis salah satunya hari ini.

Struktur

Tapi Spring bukan hanya satu framework tertentu. Sebaliknya, itu adalah nama umum yang digunakan untuk merujuk ke beberapa kerangka kerja kecil, yang masing-masing melakukan pekerjaannya sendiri. Dasar musim semi untuk orang malas, konsep dasar, dan contoh dengan kode.  Bagian 1 - 2

https://docs.spring.io/spring/docs/4.3.26.RELEASE/spring-framework-reference/htmlsingle/
Gambar 2.1. Tinjauan Kerangka Musim Semi

Seperti yang Anda lihat, Spring bersifat modular. Ini memungkinkan kita menghubungkan hanya modul yang kita perlukan untuk aplikasi kita dan tidak menghubungkan modul yang jelas tidak akan kita gunakan. Sejauh yang saya tahu, pendekatan inilah yang membuat Spring mengungguli pesaingnya (EJB) dan memimpin. Aplikasi yang menggunakan EJB menyeret banyak ketergantungan di belakangnya, dan akibatnya, aplikasi tersebut menjadi lamban dan lambat. Gambar tersebut menunjukkan bahwa Spring Framework terdiri dari beberapa modul:
  • Akses data
  • Web
  • Inti
  • dan banyak lagi
Hari ini kita akan berkenalan dengan beberapa konsep yang terdapat dalam modul utama: kacang, konteks, dan lain-lain. Seperti yang mungkin sudah Anda duga, modul Akses Data berisi alat untuk bekerja dengan data (terutama database), dan modul Web untuk bekerja di jaringan (termasuk membuat aplikasi web, yang akan dibahas nanti). Selain itu, ada infrastruktur komprehensif yang mendukung Spring: banyak proyek lain yang tidak secara resmi termasuk dalam kerangka itu sendiri, tetapi diintegrasikan dengan mulus ke dalam proyek Spring Anda (misalnya, Spring Security, yang juga ingin saya sentuh, adalah untuk mengautentikasi pengguna di situs web).

Mengapa Java memiliki Spring Framework?

Nah, selain fakta bahwa itu modis, apik, dan segar, saya dapat mengatakan sekarang bahwa segera setelah Anda mendapatkan sedikit keterampilan menggunakan Spring, Anda akan memahami bagaimana ada semua jenis pekerjaan yang tidak lagi Anda miliki. yang harus dilakukan, dan berapa banyak pekerjaan yang dilakukan Spring dengan sendirinya. Anda dapat menulis beberapa lusin baris pengaturan konfigurasi dan menulis beberapa kelas, dan Anda akan mendapatkan proyek yang berfungsi. Tapi begitu Anda mulai bertanya-tanya berapa banyak barang yang ada di bawah tenda, berapa banyak pekerjaan yang sedang dilakukan, dan berapa banyak kode yang harus Anda tulis jika Anda akan mengimplementasikan proyek yang sama berdasarkan servlet atau soket biasa dan Java murni, rambutmu akan berdiri tegak :) Musim semi bahkan digambarkan sebagai semacam keajaiban. Anda mengalami ini ketika Anda melihat bahwa semuanya bekerja, tetapi Anda juga memiliki gambaran kasar tentang bagaimana dan berapa banyak pekerjaan yang terjadi di belakang layar — jadi tampaknya memang ada semacam keajaiban yang sedang beraksi :) Lebih mudah untuk menyebutnya sihir daripada mencoba menjelaskan bagaimana semuanya saling berhubungan. :) Argumen kedua yang mendukung mempelajari Spring adalah bahwa sekitar 90% lowongan pekerjaan untuk pengembang junior (berdasarkan pengamatan pribadi saya) membutuhkan pengetahuan tentang atau setidaknya gagasan umum tentang apa itu Spring.Data, Web MVC, dan Securitymodul menawarkan pengembang yang canggih :) Tapi hari ini hanya tentang dasar-dasarnya.

DI/IoC

Jika Anda pernah mencoba membaca tentang Spring, maka hal pertama yang Anda temui mungkin adalah akronim ini: DI/IoC. Sekarang saya sangat menyarankan Anda untuk istirahat dari artikel ini dan membaca artikel DZone ini ! IoC adalah singkatan dari inversi kontrol. Saya sudah menyebutkan ini secara sepintas ketika saya menulis bahwa menggunakan perpustakaan melibatkan Anda sendiri yang menunjukkan dalam kode Anda metode mana yang memanggil objek mana, tetapi menggunakan kerangka kerja umumnya berarti bahwa kerangka kerja akan memanggil kode Anda pada waktu yang tepat. Dengan kata lain, dalam kasus terakhir ini, Anda tidak lagi mengelola proses eksekusi kode/program — framework melakukannya untuk Anda. Anda melewati kontrol ke kerangka kerja (inversi kontrol). DI adalah singkatan dari injeksi ketergantungan. Dengan injeksi ketergantungan, Anda tidak membuat objek kucing di metode utama lalu meneruskannya ke metode Anda. Sebaliknya, Spring Framework membuatnya untuk Anda. Anda cukup mengatakan sesuatu seperti "Saya ingin mendapatkan kucing di sini" dan kerangka kerja memberikan satu kepada Anda dengan cara Anda. Kita akan melihat singkatan ini di artikel mendatang.

Kacang dan konteks

Salah satu konsep kunci di Spring adalah kacang. Sebenarnya, ini hanyalah objek dari beberapa kelas. Misalkan kita memiliki program yang membutuhkan 3 objek: kucing, anjing, dan burung beo. Dan kami memiliki banyak kelas dengan banyak metode. Terkadang kita membutuhkan kucing untuk suatu metode, terkadang kita membutuhkan anjing untuk metode yang berbeda, dan terkadang metode kita membutuhkan kucing dan burung beo (misalnya, metode memberi makan kucing, ha-ha). Untuk metode lainnya, ketiga objek diperlukan. Ya, pertama-tama kita dapat membuat ketiga objek ini dalam metode utama, lalu meneruskannya ke kelas kita, dan kemudian di dalam kelas ini meneruskannya ke metode yang relevan... Dan seterusnya di seluruh program. Tetapi jika kita juga mengira bahwa kita terkadang ingin mengubah daftar parameter masukan untuk metode kita (misalnya, kami memutuskan untuk menulis ulang sesuatu atau menambahkan fungsionalitas baru), maka kami harus membuat beberapa perubahan pada kode. Dan sekarang bayangkan kita tidak memiliki 3, tetapi 300 objek seperti itu. Salah satu alternatifnya adalah mengumpulkan semua objek kita dalam satu daftar (List<Object>), teruskan ke setiap metode, lalu dapatkan objek yang diperlukan saat berada di dalam metode. Tetapi saat program berjalan, bagaimana jika beberapa objek ditambahkan ke daftar ini, atau lebih buruk lagi, bagaimana jika ada yang dihapus? Ini berpotensi merusak setiap metode di mana kami menggunakan indeks untuk mendapatkan objek dari daftar. Untuk menghindari masalah ini, kami memutuskan untuk menyimpan objek kami bukan dalam daftar, tetapi dalam peta, di mana kuncinya adalah nama objek dan nilainya adalah objek itu sendiri. Ini memungkinkan kita untuk mengambil objek yang kita butuhkan hanya dengan menggunakan namanya, misalnya get("parrot"), dan sebagai tanggapan kita mendapatkan objek parrot. Atau kuncinya bisa berupa kelas objek, dan nilainya bisa berupa objek itu sendiri. Dalam hal ini, daripada menentukan nama objek, tetapi hanya dapat menentukan kelas objek yang kita butuhkan. Itu juga nyaman. Atau kita bahkan bisa menulis semacam pembungkus untuk peta, di mana beberapa metode mendapatkan objek berdasarkan namanya, dan metode lain mendapatkan objek berdasarkan kelasnya. Apa yang telah kita capai di sini disebut ankonteks aplikasi dalam Spring Framework. Konteks adalah kumpulan kacang (objek). Kami mengakses konteks untuk mendapatkan kacang (objek) yang kami butuhkan dengan namanya, dengan jenisnya, atau dengan cara lain. Selain itu, kita dapat meminta Spring sendiri untuk melihat dalam konteksnya sendiri untuk kacang yang kita butuhkan dan meneruskannya ke metode kita. Sebagai contoh, misalkan kita memiliki metode seperti ini:

public void doSomething(Cat cat) {
    ...
}
Saat Spring memanggil metode ini, ia mengambil objek kucing kami dari konteksnya dan meneruskannya ke metode. Tapi sekarang kami memutuskan bahwa, selain kucing, metode kami juga membutuhkan burung beo. Dengan Spring, tidak ada yang lebih mudah! Kami hanya menulis:

public void doSomething(Cat cat, Parrot parrot) {
    ...
}
Sekarang ketika Spring memanggil metode kami, ia memahami kebutuhan untuk meneruskan kucing dan burung beo, jadi ia masuk ke konteksnya, mendapatkan dua objek ini, dan meneruskannya ke metode kami. Dengan mentransfer kendali ke Spring, kami juga mentransfer tanggung jawab untuk membuat objek dan meneruskannya ke metode kami, yang akan dipanggil oleh Spring. Ini menimbulkan pertanyaan: bagaimana Spring mengetahui objek (kacang) mana yang akan dibuat?

Cara mengkonfigurasi aplikasi

Ada tiga cara utama untuk mengonfigurasi aplikasi , yaitu, cara memberi tahu Spring dengan tepat objek mana yang kita butuhkan:
  1. File konfigurasi XML
  2. konfigurasi berbasis Java
  3. konfigurasi otomatis
Pencipta Spring memprioritaskan mereka dalam urutan ini:
  • metode dengan prioritas utama yang harus diutamakan adalah konfigurasi otomatis
  • jika konfigurasi otomatis tidak dapat digunakan untuk mengonfigurasi semua kemungkinan kacang dengan benar, gunakan konfigurasi berbasis Java (yang melibatkan pembuatan objek menggunakan kode Java)
  • dan metode dengan prioritas terendah adalah cara kuno — menggunakan file konfigurasi XML.
Musim semi juga memungkinkan kita menggabungkan metode ini. Misalnya, biarkan Spring mengonfigurasi semua yang dapat dikonfigurasi secara otomatis, gunakan konfigurasi berbasis Java di mana pun Anda memerlukan parameter khusus, dan gunakan XML untuk konfigurasi warisan apa pun. Ini semua berhasil menjadi cukup fleksibel. Namun, jika semuanya dapat dikonfigurasi secara otomatis, pilih opsi itu. Saya hanya akan mempertimbangkan konfigurasi otomatis dan konfigurasi berbasis Java. Konfigurasi XML digunakan di hampir setiap contoh Spring di Internet. Terlebih lagi, setelah Anda memahami cara kerja konfigurasi berbasis Java, Anda seharusnya tidak akan kesulitan membaca file XML yang melakukan hal yang sama. Konfigurasi otomatis digunakan saat kita perlu bekerja dengan objek kelas yang kita tulis. Jika membuat salah satu objek kita membutuhkan logika yang sangat spesifik, atau jika kita tidak dapat membuat beberapa kelas dengan anotasi yang diperlukan untuk konfigurasi otomatis, maka kita dapat menggunakan konfigurasi berbasis Java untuk melakukan apa yang perlu dilakukan. Dalambagian selanjutnya , kita akan membuat proyek Maven, menghubungkan beberapa modul Spring utama, dan membuat kacang pertama kita.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION