
Apakah Rangka Kerja Musim Bunga?
Rangka Kerja Spring, atau ringkasnya Spring, ialah salah satu rangka kerja yang paling popular untuk mencipta aplikasi web dalam Java. Rangka kerja adalah seperti perpustakaan (mungkin anda lebih biasa dengan istilah ini), tetapi ada sesuatu yang perlu dipertimbangkan. Secara kasarnya, apabila anda menggunakan perpustakaan, anda hanya mencipta contoh kelas yang terkandung di dalamnya, memanggil kaedah yang anda perlukan, dan dengan itu mendapatkan hasil yang anda perlukan. Dalam erti kata lain, ini adalah pendekatan yang lebih penting: dalam program anda, anda secara jelas menunjukkan detik tertentu apabila anda perlu mencipta objek mana, bila hendak memanggil kaedah tertentu, dsb. Dengan rangka kerja, perkara adalah sedikit berbeza. Anda hanya menulis beberapa kelas anda sendiri dan menulis beberapa logik di dalamnya, tetapi kemudian rangka kerja itu sendiri mencipta contoh kelas anda dan memanggil kaedah mereka. Kelas anda biasanya melaksanakan beberapa antara muka daripada rangka kerja atau mewarisi beberapa kelasnya, dengan itu memberikan anda beberapa fungsi yang telah ditulis untuk anda. Tetapi ini tidak selalu berlaku. Sebagai contoh, Spring cuba sedaya mungkin untuk mengelakkan gandingan yang begitu ketat (di mana kelas anda bergantung secara langsung pada kelas/antara muka dalam rangka kerja). Ia menggunakan anotasi untuk mencapai ini. Kami akan kembali kepada perkara ini kemudian. Tetapi penting untuk memahami bahawa Spring hanyalah koleksi kelas dan antara muka yang tersedia untuk anda gunakan :) Saya juga ingin ambil perhatian segera bahawa Spring boleh digunakan bukan sahaja untuk aplikasi web, tetapi juga untuk program konsol yang paling biasa. yang begitu biasa kita semua. Dan kami juga akan menulis salah satu daripadanya hari ini. sekali gus memberikan anda beberapa fungsi yang telah ditulis untuk anda. Tetapi ini tidak selalu berlaku. Sebagai contoh, Spring cuba sedaya mungkin untuk mengelakkan gandingan yang begitu ketat (di mana kelas anda bergantung secara langsung pada kelas/antara muka dalam rangka kerja). Ia menggunakan anotasi untuk mencapai ini. Kami akan kembali kepada perkara ini kemudian. Tetapi penting untuk memahami bahawa Spring hanyalah koleksi kelas dan antara muka yang tersedia untuk anda gunakan :) Saya juga ingin ambil perhatian segera bahawa Spring boleh digunakan bukan sahaja untuk aplikasi web, tetapi juga untuk program konsol yang paling biasa. yang begitu biasa kita semua. Dan kami juga akan menulis salah satu daripadanya hari ini. sekali gus memberikan anda beberapa fungsi yang telah ditulis untuk anda. Tetapi ini tidak selalu berlaku. Sebagai contoh, Spring cuba sedaya mungkin untuk mengelakkan gandingan yang begitu ketat (di mana kelas anda bergantung secara langsung pada kelas/antara muka dalam rangka kerja). Ia menggunakan anotasi untuk mencapai ini. Kami akan kembali kepada perkara ini kemudian. Tetapi penting untuk memahami bahawa Spring hanyalah koleksi kelas dan antara muka yang tersedia untuk anda gunakan :) Saya juga ingin ambil perhatian segera bahawa Spring boleh digunakan bukan sahaja untuk aplikasi web, tetapi juga untuk program konsol yang paling biasa. yang begitu biasa kita semua. Dan kami juga akan menulis salah satu daripadanya hari ini. Spring cuba sedaya mungkin untuk mengelakkan gandingan yang begitu ketat (di mana kelas anda bergantung secara langsung pada kelas/antara muka dalam rangka kerja). Ia menggunakan anotasi untuk mencapai ini. Kami akan kembali kepada perkara ini kemudian. Tetapi penting untuk memahami bahawa Spring hanyalah koleksi kelas dan antara muka yang tersedia untuk anda gunakan :) Saya juga ingin ambil perhatian segera bahawa Spring boleh digunakan bukan sahaja untuk aplikasi web, tetapi juga untuk program konsol yang paling biasa. yang begitu biasa kita semua. Dan kami juga akan menulis salah satu daripadanya hari ini. Spring cuba sedaya mungkin untuk mengelakkan gandingan yang begitu ketat (di mana kelas anda bergantung secara langsung pada kelas/antara muka dalam rangka kerja). Ia menggunakan anotasi untuk mencapai ini. Kami akan kembali kepada perkara ini kemudian. Tetapi penting untuk memahami bahawa Spring hanyalah koleksi kelas dan antara muka yang tersedia untuk anda gunakan :) Saya juga ingin ambil perhatian segera bahawa Spring boleh digunakan bukan sahaja untuk aplikasi web, tetapi juga untuk program konsol yang paling biasa. yang begitu biasa kita semua. Dan kami juga akan menulis salah satu daripadanya hari ini. ) Saya juga ingin ambil perhatian segera bahawa Spring boleh digunakan bukan sahaja untuk aplikasi web, tetapi juga untuk program konsol yang paling biasa yang begitu biasa kepada kita semua. Dan kami juga akan menulis salah satu daripadanya hari ini. ) Saya juga ingin ambil perhatian segera bahawa Spring boleh digunakan bukan sahaja untuk aplikasi web, tetapi juga untuk program konsol yang paling biasa yang begitu biasa kepada kita semua. Dan kami juga akan menulis salah satu daripadanya hari ini.Struktur
Tetapi Spring bukan hanya satu rangka kerja tertentu. Sebaliknya, ia adalah nama biasa yang digunakan untuk merujuk kepada beberapa rangka kerja kecil, yang setiap satunya melakukan jenis kerjanya sendiri.
https://docs.spring.io/spring/docs/4.3.26.RELEASE/spring-framework-reference/htmlsingle/
Rajah 2.1. Gambaran Keseluruhan Rangka Kerja Spring
- Akses Data
- Web
- teras
- dan banyak lagi
Mengapa Java mempunyai Rangka Kerja Spring?
Nah, selain fakta bahawa ia bergaya, licin dan segar, saya boleh katakan sekarang bahawa sebaik sahaja anda mendapat sedikit kemahiran menggunakan Spring, anda akan memahami bagaimana terdapat semua jenis kerja yang anda tidak ada lagi. untuk dilakukan, dan berapa banyak kerja yang perlu diambil oleh Spring. Anda boleh menulis beberapa dozen baris tetapan konfigurasi dan menulis beberapa kelas, dan anda berakhir dengan projek yang berfungsi. Tetapi sebaik sahaja anda mula tertanya-tanya berapa banyak barangan di bawah hud, berapa banyak kerja yang sedang dilakukan, dan berapa banyak kod yang anda perlu tulis jika anda akan melaksanakan projek yang sama berdasarkan servlet atau soket biasa dan Java tulen, rambut anda akan berdiri tegak :) Musim bunga malah digambarkan sebagai sejenis sihir. Anda mengalami ini apabila anda melihat bahawa semuanya berfungsi, tetapi anda juga mempunyai idea kasar tentang bagaimana dan berapa banyak kerja yang berlaku di sebalik tabir — jadi nampaknya benar-benar ada sejenis sihir dalam tindakan :) Lebih mudah untuk memanggilnya sihir daripada cuba menerangkan bagaimana semuanya saling berkaitan. :) Hujah kedua yang memihak kepada mempelajari Spring ialah kira-kira 90% peluang pekerjaan untuk pembangun junior (berdasarkan pemerhatian peribadi saya) memerlukan sama ada pengetahuan atau sekurang-kurangnya idea umum tentang apa yang Spring'sData
, Web MVC
, dan Security
modul menawarkan pembangun yang canggih :) Tetapi hari ini hanyalah mengenai perkara asas.
DI/IoC
Jika anda pernah cuba membaca tentang Spring, maka perkara pertama yang anda temui mungkin ialah akronim ini: DI/IoC. Sekarang saya sangat mengesyorkan agar anda berehat dari artikel ini dan membaca artikel DZone ini ! IoC bermaksud penyongsangan kawalan. Saya telah menyebut ini secara sepintas lalu apabila saya menulis bahawa menggunakan perpustakaan melibatkan anda sendiri yang menunjukkan dalam kod anda kaedah mana untuk memanggil objek mana, tetapi menggunakan rangka kerja secara amnya bermakna rangka kerja akan memanggil kod anda pada masa yang tepat. Dalam erti kata lain, dalam kes terakhir ini, anda tidak lagi menguruskan proses melaksanakan kod/program — rangka kerja melakukan ini untuk anda. Anda memberikan kawalan kepada rangka kerja (penyongsangan kawalan). DI bermaksud suntikan kebergantungan. Dengan suntikan pergantungan, anda tidak mencipta objek kucing dalam kaedah utama dan kemudian menyerahkannya kepada kaedah anda. Sebaliknya, Rangka Kerja Spring menciptanya untuk anda. Anda hanya sebut sesuatu seperti "Saya mahu mendapatkan kucing di sini" dan rangka kerja memberikan satu kepada anda dalam kaedah anda. Kita akan melihat singkatan ini dalam artikel akan datang.Kacang dan konteks
Salah satu konsep utama dalam Spring ialah kacang. Sebenarnya, ini hanyalah objek bagi sesetengah kelas. Katakan kita mempunyai program yang memerlukan 3 objek: kucing, anjing dan burung kakak tua. Dan kami mempunyai sekumpulan kelas dengan sekumpulan kaedah. Kadang-kadang kita memerlukan kucing untuk kaedah, kadang-kadang kita memerlukan anjing untuk kaedah yang berbeza, dan kadang-kadang kaedah kita memerlukan kedua-dua kucing dan burung kakak tua (contohnya, kaedah untuk memberi makan kucing, ha-ha). Untuk kaedah lain, ketiga-tiga objek diperlukan. Ya, kita boleh mula-mula mencipta tiga objek ini dalam kaedah utama, dan kemudian menghantarnya ke kelas kita, dan kemudian dalam kelas ini menghantarnya ke kaedah yang berkaitan... Dan seterusnya sepanjang keseluruhan program. Tetapi jika kita juga menganggap bahawa kita kadang-kadang ingin menukar senarai parameter input untuk kaedah kita (contohnya, kami memutuskan untuk menulis semula sesuatu atau menambah fungsi baharu), maka kami perlu membuat sedikit perubahan pada kod tersebut. Dan sekarang bayangkan bahawa kita tidak mempunyai 3, tetapi 300 objek sedemikian. Satu alternatif ialah mengumpulkan semua objek kami dalam satu senarai (List<Object>
), hantar ke setiap kaedah, dan kemudian dapatkan objek yang diperlukan semasa berada di dalam kaedah. Tetapi semasa program berjalan, bagaimana jika beberapa objek ditambahkan ke senarai ini, atau lebih teruk, bagaimana jika satu dipadamkan? Ini berpotensi untuk memecahkan setiap kaedah di mana kita menggunakan indeks untuk mendapatkan objek daripada senarai. Untuk mengelakkan masalah ini, kami memutuskan untuk menyimpan objek kami bukan dalam senarai, tetapi dalam peta, di mana kuncinya ialah nama objek dan nilainya ialah objek itu sendiri. Ini membolehkan kami mendapatkan semula objek yang kami perlukan hanya dengan menggunakan nama mereka, cth get("parrot"), dan sebagai tindak balas kami mendapat objek parrot. Atau kuncinya boleh menjadi kelas objek, dan nilainya boleh menjadi objek itu sendiri. Dalam kes ini, bukannya menentukan nama objek, tetapi hanya boleh menentukan kelas objek yang kita perlukan. Itu juga mudah. Atau kita juga boleh menulis beberapa jenis pembungkus untuk peta, di mana beberapa kaedah mendapatkan objek dengan nama mereka, dan kaedah lain mendapatkan objek mengikut kelas mereka. Apa yang kita telah sampai di sini dipanggil akonteks aplikasi dalam Rangka Kerja Spring. Konteks ialah koleksi kacang (objek). Kami mengakses konteks untuk mendapatkan kacang (objek) yang kami perlukan dengan namanya, dengan jenisnya, atau dengan beberapa cara lain. Selain itu, kami boleh meminta Spring sendiri untuk melihat dalam konteksnya sendiri untuk kacang yang kami perlukan dan menyampaikannya kepada kaedah kami. Sebagai contoh, katakan kita mempunyai kaedah seperti ini:
public void doSomething(Cat cat) {
...
}
Apabila Spring memanggil kaedah ini, ia mengambil objek kucing kami dari konteksnya dan menyampaikannya kepada kaedah. Tetapi sekarang kami telah memutuskan bahawa, sebagai tambahan kepada kucing, kaedah kami juga memerlukan burung nuri. Dengan Spring, tiada apa yang lebih mudah! Kami hanya menulis:
public void doSomething(Cat cat, Parrot parrot) {
...
}
Sekarang apabila Spring memanggil kaedah kami, ia memahami keperluan untuk menghantar kucing dan burung kakak tua, jadi ia pergi ke konteksnya, dapatkan kedua-dua objek ini dan hantarkannya ke kaedah kami. Dengan memindahkan tampuk kawalan kepada Spring, kami juga memindahkan tanggungjawab untuk mencipta objek dan menyerahkannya kepada kaedah kami, yang akan dipanggil Spring. Ini menimbulkan persoalan: bagaimana Spring mengetahui objek (kacang) yang hendak dibuat?
Cara untuk mengkonfigurasi aplikasi
Terdapat tiga cara utama untuk mengkonfigurasi aplikasi , iaitu cara untuk memberitahu Spring dengan tepat objek yang kita perlukan:- Fail konfigurasi XML
- Konfigurasi berasaskan Java
- konfigurasi automatik
- kaedah dengan keutamaan utama, yang harus diutamakan, adalah konfigurasi automatik
- jika konfigurasi automatik tidak boleh digunakan untuk mengkonfigurasi semua kacang yang mungkin dengan betul, gunakan konfigurasi berasaskan Java (yang melibatkan penciptaan objek menggunakan kod Java)
- dan kaedah keutamaan terendah ialah cara lama — menggunakan fail konfigurasi XML.
GO TO FULL VERSION