Hari ini saya mempelajari ruang lingkup ruang lingkup. Standarnya adalah Singleton Mode, mis. Scope = "Singleton". Selain itu, ruang lingkup juga memiliki prototipe, permintaan, sesi, dan ruang lingkup sesi global. scope = "prototipe" beberapa contoh. Saat mengkonfigurasi ruang lingkup kacang, formulir file headernya adalah sebagai berikut:
Cara Menggunakan Lingkup Musim Semi:
<bean id = "role" scope = "singleton"/>
Lingkup di sini digunakan untuk mengonfigurasi ruang lingkup Springbean, yang mengidentifikasi ruang lingkup kacang.
Sebelum musim semi 2.0, kacang hanya memiliki dua lingkup: singleton (singleton), non-singleton (juga dikenal sebagai prototipe). Setelah Spring 2.0, tiga kacang yang dirancang khusus untuk konteks aplikasi web telah ditambahkan. Oleh karena itu, Spring 2.0 sekarang memiliki lima jenis kacang secara default. Tentu saja, Spring 2.0 telah memperbaiki desain jenis kacang dan dirancang dukungan tipe kacang fleksibel. Secara teori, mungkin ada banyak jenis kacang. Pengguna dapat menambahkan jenis kacang baru sesuai dengan kebutuhan mereka untuk memenuhi kebutuhan aplikasi yang sebenarnya.
1. Singleton Scope
Ketika ruang lingkup kacang diatur ke Singleton, hanya akan ada satu contoh kacang bersama dalam wadah Springioc, dan semua permintaan untuk kacang, selama ID cocok dengan definisi kacang, hanya contoh yang sama dari kacang yang akan dikembalikan. Dengan kata lain, ketika menetapkan definisi kacang ke lingkup singleton, wadah Springioc hanya menciptakan contoh unik dari definisi kacang itu. Contoh tunggal ini akan disimpan dalam cache Singleton, dan semua permintaan dan referensi berikutnya ke Bean akan mengembalikan instance objek yang di -cache. Perlu dicatat di sini bahwa ruang lingkup singleton dan singleton dalam pola desain GOF benar -benar berbeda. Pola desain singleton berarti bahwa hanya satu kelas yang ada di classloader, dan singleton di sini berarti bahwa sebuah wadah sesuai dengan kacang. Dengan kata lain, ketika kacang diidentifikasi sebagai singleton, hanya satu kacang yang akan ada di wadah IOC musim semi.
Contoh konfigurasi:
<bean id = "role" scope = "singleton"/> atau <bean id = "role" singleton = "true"/>
2. Prototipe
Setiap permintaan (menyuntikkannya ke dalam kacang lain, atau memanggil metode Container's GetBean () dalam bentuk program) akan menghasilkan instance kacang baru, yang setara dengan operasi baru. Untuk kacang dengan ruang lingkup prototipe, satu sangat penting, yaitu musim semi tidak dapat bertanggung jawab atas seluruh siklus hidup prototipe. Setelah wadah menginisialisasi, mengkonfigurasi, menghias atau merakit instance prototipe, itu menyerahkannya kepada klien, dan kemudian mengabaikan instance prototipe. Terlepas dari ruang lingkupnya, wadah akan memanggil metode panggilan balik siklus hidup yang diinisialisasi dari semua objek, dan untuk prototipe, metode panggilan balik siklus hidup yang dihancurkan tidak akan dipanggil. Merupakan tanggung jawab kode klien untuk menghapus objek prototipe yang dilingkup dan membebaskan sumber daya mahal apa pun yang dipegang oleh prototipe. (Salah satu cara yang layak untuk memiliki sumber daya bebas wadah musim semi yang ditempati oleh kacang singleton-scoped adalah dengan menggunakan postprocessor kacang, yang memegang referensi ke kacang yang akan dibersihkan.)
Contoh konfigurasi:
<bean id = "role" scope = "prototipe"/> atau <beanid = "role" singleton = "false"/>
3. Permintaan
Permintaan menunjukkan bahwa kacang baru akan dihasilkan untuk setiap permintaan HTTP. Pada saat yang sama, kacang hanya valid dalam httpRequest saat ini. Contoh konfigurasi adalah:
Saat menggunakan permintaan, sesi, dan globalsession, Anda harus terlebih dahulu membuat konfigurasi berikut di Web.xml yang diinisialisasi:
Jika Anda menggunakan wadah web dengan Servlet 2.4 atau lebih, Anda hanya perlu menambahkan ContextListener berikut ke file deklarasi XML Web.xml dari aplikasi web:
<web-app> ... <listener> <Distener-Class> org.springframework.web.context.request.requestContextListener </engeaner-class> </listener> ... </seb-app>
Jika itu adalah wadah web sebelum servlet 2.4, maka Anda perlu menggunakan implementasi javax.servlet.filter:
<web-app> .. <filter> <filter-name>requestContextFilter</filter-name> <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class> </filter> <filter-mapping> <filter-name>requestContextFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ... </spapp>
Kemudian Anda dapat mengonfigurasi ruang lingkup kacang:
<bean id = "role" scope = "request"/>
4. Sesi
Lingkup sesi menunjukkan bahwa kacang baru akan dihasilkan untuk setiap permintaan HTTP. Pada saat yang sama, kacang hanya valid dalam httpsession saat ini. Contoh konfigurasi adalah:
Contoh konfigurasi:
Sama seperti prasyarat untuk mengkonfigurasi instance permintaan, setelah mengkonfigurasi file startup web, Anda dapat mengonfigurasinya sebagai berikut:
<bean id = "role" scope = "session"/>
5. Globalsession
Lingkup globalsession mirip dengan ruang lingkup httpsession standar, tetapi hanya masuk akal dalam aplikasi web berbasis portlet. Spesifikasi portlet mendefinisikan konsep sesi global, yang dibagikan oleh semua portlet berbeda yang membentuk aplikasi web portlet. Kacang yang didefinisikan dalam ruang lingkup global terbatas pada siklus hidup portletsession global. Jika Anda menggunakan ruang lingkup globalsession untuk mengidentifikasi kacang di web, web akan secara otomatis digunakan sebagai jenis sesi.
Contoh konfigurasi:
Sama seperti prasyarat untuk mengkonfigurasi instance permintaan, setelah mengkonfigurasi file startup web, Anda dapat mengonfigurasinya sebagai berikut:
<bean id = "role" scope = "global sesi"/>
Meringkaskan
Di atas adalah semua tentang diskusi singkat artikel ini tentang ruang lingkup ruang lingkup di musim semi, dan saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!