Pembantu yang mahir dan rajin - kacang - bekerja di bengkel Spring. Setiap daripada mereka dikurniakan tugas tersendiri: ada yang mencipta mainan, menyusun gula-gula dan ada yang menanam bunga yang terang.
Untuk memastikan kerja bengkel teratur dan cekap, peraturan yang jelas untuk tong sampah diwujudkan - skop. Peraturan ini menentukan berapa lama kacang boleh wujud dan berapa banyak contoh jenis yang sama boleh dibuat pada masa yang sama. Terima kasih kepada rangka kerja ajaib ini, bengkel ini berfungsi dengan lancar dan boleh dipercayai.
Prototaip: Hedgehog Baker
Setiap kali seseorang memesan pai, Hedgehog Baker mencipta pai baharu dengan bahan-bahan unik.
Landak: "Semua orang mahu rasa mereka sendiri! Itulah sebabnya saya mencipta pai segar untuk setiap pesanan."
@Component @Scope("prototype") public class Hedgehog { public void bakePie() { System.out.println("Пеку пирог!"); } }
Beginilah cara skop prototaip berfungsi dalam Musim Bunga: setiap kali objek baharu diminta, tika unik kacang dibuat. Ini berguna apabila anda memerlukan logik terpencil untuk setiap penggunaan.
Contohnya:
Aplikasi ini mempunyai kacang yang menjana laporan untuk setiap pengguna:
@Component @Scope("prototype") public class ReportGenerator { public Report generate(String userData) { // Генерация уникального отчета return new Report(userData); } }
Setiap panggilan ke context.getBean(ReportGenerator.class) akan mencipta tika baharu. Ini mudah untuk memproses data unik dalam sistem berbilang pengguna.
Permintaan: Carrot Bunny
Arnab pendispens menerangkan kepada pembantunya:
"Untuk setiap tetamu yang datang ke kawasan lapang, saya mengumpul lobak merah. Tetapi sebaik tetamu pergi, bakul itu kembali kepada saya."
@Component @Scope("prototype") public class Hedgehog { public void bakePie() { System.out.println("Пеку пирог!"); } }
Permintaan skop dalam Spring bermakna bahawa satu biji dibuat untuk setiap permintaan HTTP. Setelah permintaan selesai, kacang dimusnahkan.
Contoh penggunaan:
Bayangkan bahawa dalam aplikasi web anda mempunyai komponen untuk mengumpul data pengguna:
@Component @Scope("prototype") public class ReportGenerator { public Report generate(String userData) { // Генерация уникального отчета return new Report(userData); } }
Setiap permintaan pengguna diperuntukkan satu bakul unik, yang "hidup" hanya sebagai sebahagian daripada memproses permintaan HTTP. Setelah permintaan selesai, kacang dipadamkan, membebaskan memori.
Perbandingan Prototaip dan Permintaan dalam pembangunan sebenar:
Prototaip: Digunakan untuk tugasan yang memerlukan kejadian unik pada setiap panggilan, seperti menguji, menjana data unik, memproses tugas terpencil.
Permintaan: Berguna dalam aplikasi web untuk menyediakan pengasingan data antara permintaan pengguna. Contohnya, troli beli-belah, data pengesahan atau token sementara.
Perbezaan dalam pendekatan:
Prototaip boleh digunakan dalam sebarang konteks, termasuk aplikasi konsol.
Permintaan terikat dengan konteks web kerana ia bergantung pada permintaan HTTP.
Singleton: Bob the Builder
Bob the Builder bekerja di hutan dan membina empangan untuk semua orang. Dia berkata:
"Saya bersendirian, dan saya akan membina apa sahaja, tidak kira berapa banyak haiwan datang kepada saya!"
Ini bermakna kami akan sentiasa mempunyai contoh objek yang sama yang diakses oleh semua pelanggan. Dan setiap kali Bob yang sama datang. Dia tidak perlu diklon atau hilang. Jadi dia bekerja hari demi hari.
@Component @Scope("prototype") public class Hedgehog { public void bakePie() { System.out.println("Пеку пирог!"); } }
Singleton ialah skop lalai dalam Spring. Satu contoh kacang dibuat untuk keseluruhan tempoh permohonan. Kacang ini digunakan apabila objek mesti menjadi sumber yang dikongsi antara semua komponen aplikasi.
Contoh penggunaan:
Katakan anda mempunyai komponen pengelogan:
@Component @Scope("prototype") public class ReportGenerator { public Report generate(String userData) { // Генерация уникального отчета return new Report(userData); } }
Kacang ini dicipta sekali, dan semua komponen aplikasi menggunakannya untuk merekodkan log. Ini cekap dan menjimatkan memori.
Permohonan:
- Membalak
- Bekerja dengan pangkalan data melalui kolam sambungan
- Urus cache
Sesi: Beruang Madu
Beruang kecil itu memasak madu untuk setiap tetamu yang datang ke rumahnya. Dia berkata:
"Semasa anda melawat saya, saya menjaga periuk madu anda. Tetapi sebaik sahaja anda pergi, periuk madu anda hilang."
@Component @Scope("request") public class Rabbit { public void giveCarrot() { System.out.println("Вот твоя морковка!"); } }
Skop sesi dalam Spring bermakna kacang itu wujud selagi sesi HTTP pengguna berlangsung.
Penjelasan teknikal:
Skop ini digunakan dalam aplikasi web untuk mengikat objek pada sesi pengguna tertentu. Apabila sesi tamat, kacang hancur.
Contoh penggunaan:
Bayangkan anda mempunyai komponen untuk menyimpan data kebenaran pengguna:
@Component @Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS) public class UserCart { private List<Item> items = new ArrayList<>(); public void addItem(Item item) { items.add(item); } public List<Item> getItems() { return items; } }
Kacang ini dicipta untuk setiap pengguna selagi sesi mereka berlangsung.
Permohonan:
- Menyimpan data pengguna (contohnya, kebenaran, keutamaan)
- Pengurusan token sesi
Permohonan: Filin Phil
Phil si burung hantu menceritakan kisah dongeng kepada semua penduduk hutan setiap petang. Dia berkata:
"Kisah dongeng saya adalah satu-satunya di seluruh hutan. Semua orang datang untuk mendengar saya, dan cukup untuk semua orang!"
@Component @Scope("prototype") public class Hedgehog { public void bakePie() { System.out.println("Пеку пирог!"); } }
Skop aplikasi bermaksud kacang dicipta sekali untuk keseluruhan aplikasi, tetapi berbeza daripada singleton kerana ia digunakan hanya dalam konteks aplikasi web.
Skop ini serupa dengan singleton, tetapi dikawal oleh konteks web. Ia digunakan untuk komponen yang mesti boleh diakses sepanjang aplikasi.
Contoh penggunaan:
Contohnya, kacang untuk menyimpan tetapan global:
@Component @Scope("prototype") public class ReportGenerator { public Report generate(String userData) { // Генерация уникального отчета return new Report(userData); } }
Kacang ini dicipta sekali dan tersedia untuk semua orang.
Permohonan:
- Konfigurasi aplikasi
- Tetapan global
- Cache data dikongsi oleh semua pengguna
Perbandingan semua skop Spring
Scope | Жизненный цикл | Пример использования |
---|---|---|
Singleton | Всё время работы приложения | Логирование, работа с базами данных |
Prototype | Новый объект при каждом вызове | Генерация отчётов, тестирование |
Request | Один HTTP-запрос | Корзина покупок, временные данные |
Session | Вся HTTP-сессия пользователя | Данные авторизации, настройки пользователя |
Application | Всё время работы приложения | Глобальные настройки, кэш на уровне приложения |
Bila hendak menggunakan apa?
Singleton - untuk berkongsi sumber yang tidak berubah.
Prototaip - untuk tugasan terpencil, data unik.
Permintaan - untuk data sementara dalam satu permintaan.
Sesi - untuk data yang perlu disimpan antara permintaan pengguna yang sama.
Aplikasi - untuk data global yang digunakan oleh semua pengguna.
Atas ialah kandungan terperinci Skop ajaib: Cara Spring menyusun kacang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Java menyokong pengaturcaraan asynchronous termasuk penggunaan aliran yang boleh diselesaikan, aliran responsif (seperti ProjectReactor), dan benang maya di Java19. 1.CompletableFuture meningkatkan kebolehbacaan dan penyelenggaraan kod melalui panggilan rantai, dan menyokong orkestrasi tugas dan pengendalian pengecualian; 2. ProjectReactor menyediakan jenis mono dan fluks untuk melaksanakan pengaturcaraan responsif, dengan mekanisme tekanan belakang dan pengendali yang kaya; 3. Thread maya mengurangkan kos konvensional, sesuai untuk tugas I/O-intensif, dan lebih ringan dan lebih mudah untuk berkembang daripada benang platform tradisional. Setiap kaedah mempunyai senario yang berkenaan, dan alat yang sesuai harus dipilih mengikut keperluan anda dan model campuran harus dielakkan untuk mengekalkan kesederhanaan

Di Java, enums sesuai untuk mewakili set tetap tetap. Amalan terbaik termasuk: 1. Gunakan enum untuk mewakili keadaan tetap atau pilihan untuk meningkatkan keselamatan jenis dan kebolehbacaan; 2. Tambah sifat dan kaedah untuk meningkatkan fleksibiliti, seperti menentukan bidang, pembina, kaedah penolong, dan lain -lain; 3. Gunakan enummap dan enumset untuk meningkatkan prestasi dan jenis keselamatan kerana mereka lebih cekap berdasarkan tatasusunan; 4. Elakkan penyalahgunaan enum, seperti nilai dinamik, perubahan kerap atau senario logik kompleks, yang harus digantikan dengan kaedah lain. Penggunaan enum yang betul boleh meningkatkan kualiti kod dan mengurangkan kesilapan, tetapi anda perlu memberi perhatian kepada sempadannya yang berkenaan.

Javanio adalah IOAPI baru yang diperkenalkan oleh Java 1.4. 1) bertujuan untuk penampan dan saluran, 2) mengandungi komponen teras penampan, saluran dan pemilih, 3) menyokong mod tidak menyekat, dan 4) mengendalikan sambungan serentak lebih cekap daripada IO tradisional. Kelebihannya dicerminkan dalam: 1) IO yang tidak menyekat mengurangkan overhead thread, 2) Buffer meningkatkan kecekapan penghantaran data, 3) pemilih menyedari multiplexing, dan 4) memori pemetaan memori sehingga membaca dan menulis fail. Nota Apabila menggunakan: 1) Operasi flip/jelas penampan mudah dikelirukan, 2) Data yang tidak lengkap perlu diproses secara manual tanpa menyekat, 3) Pendaftaran pemilih mesti dibatalkan dalam masa, 4) NIO tidak sesuai untuk semua senario.

HashMap melaksanakan penyimpanan pasangan nilai utama melalui jadual hash di Java, dan terasnya terletak di lokasi data yang cepat. 1. Mula -mula gunakan kaedah hashcode () kunci untuk menghasilkan nilai hash dan mengubahnya menjadi indeks array melalui operasi bit; 2 Objek yang berbeza boleh menghasilkan nilai hash yang sama, mengakibatkan konflik. Pada masa ini, nod dipasang dalam bentuk senarai yang dipautkan. Selepas JDK8, senarai yang dipautkan terlalu panjang (panjang lalai 8) dan ia akan ditukar kepada pokok merah dan hitam untuk meningkatkan kecekapan; 3. Apabila menggunakan kelas tersuai sebagai kunci, sama () dan kaedah hashcode () mesti ditulis semula; 4. HashMap secara dinamik mengembangkan kapasiti. Apabila bilangan elemen melebihi kapasiti dan multiplies oleh faktor beban (lalai 0.75), mengembangkan dan mengembalikan; 5. hashmap tidak selamat benang, dan concu harus digunakan dalam multithreaded

Penghitungan Java bukan sahaja mewakili pemalar, tetapi juga boleh merangkum tingkah laku, membawa data, dan melaksanakan antara muka. 1. Penghitungan adalah kelas yang digunakan untuk menentukan contoh tetap, seperti minggu dan negeri, yang lebih selamat daripada rentetan atau bilangan bulat; 2. Ia boleh membawa data dan kaedah, seperti nilai lulus melalui pembina dan menyediakan kaedah akses; 3. Ia boleh menggunakan suis untuk mengendalikan logik yang berbeza, dengan struktur yang jelas; 4. Ia boleh melaksanakan antara muka atau kaedah abstrak untuk membuat tingkah laku yang berbeza dari nilai penghitungan yang berbeza; 5. Beri perhatian untuk mengelakkan penyalahgunaan, perbandingan kod keras, pergantungan pada nilai ordinal, dan penamaan dan bersiri yang munasabah.

Corak reka bentuk singleton di Java memastikan bahawa kelas hanya mempunyai satu contoh dan menyediakan titik akses global melalui pembina swasta dan kaedah statik, yang sesuai untuk mengawal akses kepada sumber yang dikongsi. Kaedah pelaksanaan termasuk: 1. 2. Pemprosesan Safe Thread, memastikan bahawa hanya satu contoh yang dibuat dalam persekitaran berbilang threaded melalui kaedah penyegerakan atau penguncian cek berganda, dan mengurangkan kesan prestasi; 3. 4. Pelaksanaan penghitungan, menggunakan penghitungan Java untuk secara semulajadi menyokong serialisasi, keselamatan thread dan mencegah serangan reflektif, adalah kaedah ringkas dan boleh dipercayai. Kaedah pelaksanaan yang berbeza boleh dipilih mengikut keperluan khusus

Pilihan dapat jelas menyatakan niat dan mengurangkan bunyi kod untuk penghakiman null. 1. Pilihan.Ofnullable adalah cara biasa untuk menangani objek null. Sebagai contoh, apabila mengambil nilai dari peta, Orelse boleh digunakan untuk memberikan nilai lalai, supaya logik lebih jelas dan ringkas; 2. Gunakan panggilan rantaian peta untuk mencapai nilai bersarang untuk menghindari NPE dengan selamat, dan secara automatik menamatkan jika ada pautan adalah null dan mengembalikan nilai lalai; 3. Penapis boleh digunakan untuk penapisan bersyarat, dan operasi seterusnya akan terus dilakukan hanya jika syarat -syarat dipenuhi, jika tidak, ia akan melompat terus ke Orelse, yang sesuai untuk penghakiman perniagaan ringan; 4. Ia tidak disyorkan untuk menggunakan terlalu banyak pilihan, seperti jenis asas atau logik mudah, yang akan meningkatkan kerumitan, dan beberapa senario akan terus kembali ke NU.

Penyelesaian teras untuk menghadapi java.io.notserializableException adalah untuk memastikan bahawa semua kelas yang perlu bersiri melaksanakan antara muka berseri dan periksa sokongan serialisasi objek bersarang. 1. Tambah implementsSerializable ke kelas utama; 2. Pastikan kelas medan tersuai yang sepadan di dalam kelas juga melaksanakan bersiri; 3. Gunakan sementara untuk menandakan medan yang tidak perlu bersiri; 4. Periksa jenis yang tidak berseri dalam koleksi atau objek bersarang; 5. Semak kelas mana yang tidak melaksanakan antara muka; 6. Pertimbangkan reka bentuk pengganti untuk kelas yang tidak dapat diubah suai, seperti menyimpan data utama atau menggunakan struktur pertengahan berseri; 7. Pertimbangkan untuk mengubah suai
