1. Apa yang bisa dilakukan Spring?
Tujuan utama musim semi adalah membuat J2EE mudah digunakan dan mempromosikan kebiasaan pemrograman yang baik.
Inti desain pegas kontainer kontrol terbalik adalah paket org.springframework.beans, yang dirancang untuk bekerja dengan JavaBeans. Paket ini umumnya tidak secara langsung digunakan oleh pengguna, tetapi berfungsi sebagai dasar untuk lebih banyak layanan fungsional lainnya. Abstraksi level yang lebih tinggi berikutnya adalah "pabrik kacang". Spring Bean Factory adalah pabrik normal yang memungkinkan objek untuk diambil dengan nama dan mengelola hubungan antar objek. Pabrik kacang mendukung dua pola objek :. Singleton: Dalam pola ini, ada contoh objek bersama dengan nama tertentu, yang diambil saat melihat ke atas. Ini adalah default dan paling umum digunakan. Ini adalah pola yang ideal untuk benda tanpa kewarganegaraan. .Prototype: Dalam mode ini, objek terpisah akan dibuat setiap kali pengambilan diperoleh.
2. Metode pemuatan dan implementasi Mulai Musim Semi
Yang pertama: mengimplementasikan operasi sebelum menginisialisasi dan menghancurkan kacang dengan anotasi metode @postconstruct dan @predestroy
Tipe kedua: Tentukan metode init-metod dan destori-metode dalam XML
Tipe ketiga: Menerapkan antarmuka inisialisasi dan sekali pakai melalui kacang -kacangan
Jenis Keempat: Tulis kelas untuk mengimplementasikan antarmuka BeanPostProcessor. Antarmuka ini memiliki dua metode.
(1): Metode postprocessBeforeInitialisasi, panggil metode ini sebelum kacang yang ditentukan pada musim semi diinisialisasi sebelum kacang yang ditentukan pada musim semi
(2): Metode postprocessafterinitialisasi, panggil metode ini atau implementasi setelah kacang yang didefinisikan pada musim semi diinisialisasi atau diinisialisasi.
InstantiationAwarebeanPostProcessor adalah subinterface dari beanpostprocessor
Jalankan setelah wadah pegas dimuat
Dari pendengar musim semi sebagai entri.
org.springframework.web.context.contextLoaderListener
Temukan metode untuk menginisialisasi pegas
/*** Inisialisasi konteks aplikasi web root. */ @Override public void contextInitialized (event servletContextEvent) {initwebApplicationContext (event.getSerVletContext ()); }Masukkan metode initwebapplicationContext
if (this.context == null) {this.context = createWeBapPlicationContext (servletContext); } if (this.context instance dari configAbleAbleAblicationContext) {configAbleWeBapPlicationContext cWAC = (configAbleWeBapPlicationContext) this.context; if (! cwac.isActive ()) {// Konteksnya belum disegarkan -> menyediakan layanan seperti // mengatur konteks induk, mengatur ID konteks aplikasi, dll jika (cwac.getParent () == null) {// Contoh konteksnya disuntikkan tanpa orang tua eksplisit -> // menentukan orang tua untuk konteks aplikasi web root, jika ada. ApplicationContext Parent = LoadParEntContext (ServletContext); CWAC.SetParent (Parent); } configureandrefreshWebApplicationContext (CWAC, ServletContext); }} ApplicationListener
1. Tulis kelas pendengar yang mengimplementasikan ApplicationListener.
impor org.springframework.context.applicationListener; impor org.springframework.context.event.contextrefreshedEvent; impor org.springframewement.stereotype.service; @servicePublic startuplistenerkenermlementserenererererererererererererererererererererererererererererererererererererererererererenerenererererererererererererererererererererererererererererererererenerererererererererererererererererenerererererererererererererenererererererererererenererererererererenererererenererererenerererenerkener. OnApplicationEvent (contextrefreshedEvent event) {if (event.getApplicationContext (). getParent () == null) // root Application Context tidak memiliki induk, ia adalah bos. {// Kode logis yang perlu dieksekusi akan dieksekusi setelah wadah musim semi diinisialisasi. System.out.println ("/n/n/n/n/n/n ______________/n/n/n dimuat/n/n _________/n/n"); } // atau metode berikut if (event.getApplicationContext (). getDisplayName (). Equals ("root webapplicationContext")) {System.out.println ("/n/n/n ________/n/n/n dimuat sekali/n/n _________/n/n"); }}}2. Setel Paket Pemindaian Layanan di file konfigurasi (ApplicationContext-Servlet.xml)
<!-Daftarkan @Controller, @Service-> <Context: Component-Scan Base-package = "com.test.controller" use-default-filters = "false"> <context: include-filter type = "annotation" expression = org.springframework.stereotipe.stertroller " /contacted: org.springframework. Expression = "org.springframework.stereotype.service" /> < /konteks: component-scan>
3. Menyebarkan proyek startup dan mencetak "muat" setelah musim semi dimuat
ApplicationOntext dan WebApplicationIntext setelah menggunakan MVC akan memanggil metode di atas dua kali. Bagaimana cara membedakan antara dua wadah ini?
Tetapi saat ini, akan ada masalah. Dalam proyek Web (SpringMVC), akan ada dua kontainer dalam sistem, satu adalah konteks rootApplication, dan yang lainnya adalah proyek kami sendiri-servletContext (sebagai subkontainer dari konteks rootapplication).
Dalam hal ini, metode onApplicationEvent akan dieksekusi dua kali. Untuk menghindari masalah yang disebutkan di atas, kita hanya dapat memanggil kode logis setelah konteks rootapplication diinisialisasi. Jika inisialisasi wadah lain selesai, tidak ada pemrosesan yang akan dilakukan. Setelah kode yang dimodifikasi selesai, kode akan dimodifikasi.
sebagai berikut:
@Override public void onApplicationEvent (contextrefreshedEvent event) {if (event.getApplicationContext (). GetParent () == null) {// konteks aplikasi root tidak ada orang tua, itu adalah bos. // Kode logis yang perlu dieksekusi akan dieksekusi ketika wadah pegas diinisialisasi. }}Urutan inisialisasi adalah:
Konstruktor> @PostConstruct> InitializingBean> init-Method
Meringkaskan
Di atas adalah semua tentang analisis awal kerangka kerja musim semi dalam artikel ini, saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan kapan saja dan editor akan membalas semua orang tepat waktu. Terima kasih teman atas dukungan Anda untuk situs ini!