"Spring Jilid 18 "Temuduga Lapan Bahagian Esei" keluar lagi. Kali ini saya telah menyelesaikan soalan temuduga tentang musim bunga. Saya juga melihat soalan temuduga tentang musim bunga dalam talian dan meringkaskannya. Pada asasnya mereka ada di sini. Sudah tentu, mungkin terdapat beberapa konsep yang terlalu asas saya telah menyusunnya secara langsung ke dalam soalan tertentu, jadi saya tidak membuka soalan yang berasingan corak reka bentuk digunakan dalam musim bunga? adakah perbezaannya? adalah DI?
8. Apakah itu AOP?
11.Apakah perbezaan antara Spring AOP dan AspectJ AOP?
12. Apakah kitaran hidup Bean pada musim bunga
13 Bagaimana spring menyelesaikan kebergantungan pekeliling
14 selesaikan?
15.Apakah perbezaan antara @Autowired dan @Resource?
16.Apakah tahap pengasingan transaksi spring?
17.Apakah mekanisme penyebaran spring?
18.springBoot prinsip pemasangan automatik?
Apakah corak reka bentuk yang digunakan pada musim bunga? 「 2 .Corak reka bentuk ejen"
: Pelaksanaan AOP adalah melalui proksi. Spring terutamanya menggunakan proksi dinamik JDK dan proksi CGLIB
"3. Corak reka bentuk Singleton": Kacang dalam Spring adalah tunggal secara lalai. Contoh
「4. Corak kaedah templat」: Pada Musim Bunga, jdbcTemplate dan kelas lain yang berakhir dengan Templat yang beroperasi pada pangkalan data akan menggunakan corak reka bentuk kaedah templat, beberapa fungsi biasa
「5 Pattern": Projek kami perlu menyambung kepada berbilang pangkalan data, dan pelanggan yang berbeza akan mengakses pangkalan data yang berbeza mengikut keperluan mereka semasa setiap lawatan.Mod ini membolehkan kami bertukar secara dinamik antara sumber data yang berbeza mengikut keperluan pelanggan
『6 Corak pemerhati』: Corak pemerhati model dipacu peristiwa musim bunga
『7 penambahbaikan atau nasihat menggunakan corak penyesuai
2 Apakah modul teras yang ada pada musim bunga?
1."Spring Core" : Bahagian Teras Spring, ia adalah: rangka kerja, menyediakan ciri IOC dan suntikan kebergantungan DI
2.「Konteks Musim Bunga」: Bekas konteks musim bunga, yang merupakan sub-antara muka dengan fungsi BeanFactory yang dipertingkatkan
3." : Ia menyediakan sokongan untuk pembangunan aplikasi Web
4."Spring MVC": Ia menyasarkan pelaksanaan idea MVC dalam aplikasi Web
5."Spring DAO": Menyediakan sokongan untuk JDBC The abstraction lapisan memudahkan pengekodan JDBC, dan pada masa yang sama, pengekodan lebih mantap
6."Spring ORM": Ia menyokong penyepaduan rangka kerja ORM yang popular, seperti: Spring + Hibernate, Spring + iBatis, Spring + Penyepaduan JDO, dsb.
7."Spring AOP": Pengaturcaraan berorientasikan aspek, yang menyediakan pelaksanaan pengaturcaraan yang serasi dengan AOP Alliance
Beritahu saya apa yang anda faham?
Pertama sekali, IOC ialah "bekas", yang digunakan untuk memuatkan objek ialah
"Penyongsangan Kawalan"
Jadi apa sebenarnya
"Apa itu Dalam. ?
Penyongsangan kawalan bermaksud, "Berikan kawalan objek kepada spring dan uruskannya dengan bekas spring"
, kami tidak melakukan sebarang operasi🎜
Jadi mengapa "Apa yang memerlukan penyongsangan kawalan"?
Mari bayangkan tanpa penyongsangan kawalan, kita perlu "membuat objek dan mengkonfigurasi objek sendiri", dan juga "mengendalikan objek dan objek secara manual Pelbagai kebergantungan kompleks antara mereka", apabila projek diperbesarkan, penyelenggaraan hubungan ini sangat menyusahkan, jadi terdapat konsep penyongsangan kawalan, yang menggabungkan penciptaan dan konfigurasi objek, dll. Satu siri operasi diuruskan oleh musim bunga. Apabila kita menggunakannya, kita hanya perlu mengambilnya 4. Apakah bekas IOC pada musim bunga?
, dan satu lagi ialah
"ApplicationContext"Perbezaan antara mereka ialah BeanFactory "hanya menyediakan fungsi paling asas untuk menginstant objek dan mendapatkan objek"
, ApplicationContext ialah produk yang diperoleh daripada BeanFactory dan merupakan subkelasnya . Fungsinya lebih berkuasa, seperti menyokong suntikan anotasi, pengantarabangsaan dan fungsi lain
5 Apa beza BeanFactory dan FactoryBean?
Kedua-dua ini
"Beza
. ialah bekas IOC", yang digunakan untuk membawa objek"FactoryBean ialah antara muka"
, yang menyediakan cara yang lebih fleksibel untuk Bean. Dengan memproksi objek Bean, beberapa operasi dilakukan sebelum dan selepas kaedah.
6 Apakah perbezaan antara @Repository, @Service, @Compent, dan @Controller
Intipati empat anotasi ini adalah sama, kesemuanya meletakkan objek yang dikenal pasti oleh anotasi bekas spring, ia hanya untuk membezakan lapisan aplikasi yang berbeza yang digunakan"
.
7 Jadi apakah DI
DI adalah suntikan kebergantungan Sebenarnya, ia lebih kurang sama dengan IOC, tetapi
"Konsep yang sama dijelaskan dari sudut yang berbeza"
. "Intinya ialah Ketergantungan"
, kami berkata
"Fungsi teras IOC adalah untuk menyediakan objek bergantung lain secara dinamik kepada objek apabila program sedang berjalan", dan fungsi ini dicapai oleh DI Sebagai contoh, kita perlu menyuntik objek A, dan objek A ini bergantung pada objek B, maka kita perlu menyuntik objek B ini ke dalam objek A. Ini adalah suntikan kebergantungan dalam suntikan antara muka
suntikan
8. Apakah itu AOP?
AOP bermaksud:
"Pengaturcaraan berorientasikan aspek, yang mencapai penyelenggaraan bersatu fungsi program melalui pra-penyusunan dan proksi dinamik semasa masa jalan teknologi A”AOP ialah "Kesinambungan OOP (Pengaturcaraan Berorientasikan Objek)"
Ia merupakan kandungan penting dalam rangka kerja Spring dan paradigma terbitan pengaturcaraan berfungsi. AOP boleh digunakan untuk mengasingkan pelbagai bahagian logik perniagaan, dengan itu mengurangkan gandingan antara pelbagai bahagian logik perniagaan, meningkatkan kebolehgunaan semula program, dan meningkatkan kecekapan pembangunan.
「Pelaksanaan AOP terbahagi kepada dua kategori:」
"Pelaksanaan AOP statik" , rangka kerja AOP "semasa fasa penyusunan" mengubah suai kod sumber program dan menghasilkan kelas proksi AOP statik (fail *.class yang dihasilkan telah ditukar, Anda perlu gunakan pengkompil khusus), seperti AspectJ
"Pelaksanaan AOP Dinamik" , rangka kerja AOP "pada masa jalan" untuk objek proksi yang dijana secara dinamik (dalam ingatan dengan proksi dinamik JDK, atau proksi CG yang dijana secara dinamik oleh proksi CG ), seperti SpringAOP
Pelaksanaan AOP pada musim bunga "dilaksanakan melalui proksi dinamik" Jika antara muka dilaksanakan, proksi dinamik JDK akan digunakan, jika tidak proksi CGLIB akan digunakan. . kaedah kembali Selepas memanggil
「@AfterThrowing」: Dipanggil selepas kaedah sasaran kembali
「@Selepas」: Dipanggil selepas kaedah sasaran
Sekitar」
: Dipanggil selepas kaedah sasaran mengembalikan pengecualian Bungkusnya dan tentukan masa panggilan sendiri
9 Apakah perbezaan antara proksi dinamik dan proksi statik?
"Proksi statik"
.
Kod sumber dicipta oleh pengaturcara atau dijana secara automatik oleh alatan tertentu dan kemudian disusun. Sebelum program dijalankan, fail .class kelas proksi sudah wujud
Proksi statik biasanya hanya proksi satu kelas
Proksi statik tahu terlebih dahulu apa yang hendak diproksi
"Proksi dinamik" "Proksi dinamik"
Dicipta secara dinamik menggunakan mekanisme pantulan semasa program berjalan
Proksi dinamik ialah proksi untuk berbilang kelas pelaksanaan di bawah antara muka
Proksi dinamik tidak tahu apa yang hendak diproksi, ia hanya tahu apabila ia berjalan
10. Apakah perbezaan antara proksi dinamik JDK dan proksi CGLIB?
JDK kelas perniagaan proksi dinamik
"mesti melaksanakan antara muka tertentu" , iaitu "dilaksanakan berdasarkan mekanisme refleksi" Ia menjana kelas proksi yang melaksanakan antara muka yang sama, dan kemudian menulis semula kaedah itu mencapai peningkatan pada kod.
Proksi dinamik CGLIB menggunakan rangka kerja pemprosesan kod bait ASM Prinsipnya ialah menggunakan teknologi kod bait untuk "membuat subkelas untuk kelas dan kemudian mengatasi kaedah kelas induk"
untuk meningkatkan kod.
11.Apakah perbezaan antara Spring AOP dan AspectJ AOP? Spring AOP ialah peningkatan masa larian, yang dicapai melalui
"Pelaksanaan Proksi Dinamik"
AspectJ AOP ialah peningkatan masa kompilasi, yang memerlukan pengkompil khas untuk melengkapkan, dan dicapai melalui
"mengubah suai kod
, Sokong "Tiga kaedah anyaman"
"Tenun masa kompilasi": Ia adalah untuk menganyam kelas proksi yang berkaitan apabila menyusun kod bait
"Tenunan pasca penyusunan": Selepas menyusun kelas awal, didapati bahawa peningkatan AOP diperlukan dan kemudian menganyam Masukkan kod yang berkaitan
"Menyaman apabila kelas dimuatkan" : merujuk kepada menganyam apabila pemuat memuatkan kelas
Perbezaan utama
Spring AOP
AspecjtJ AOP
Kaedah Mengumpul peningkatan masa
Kaedah pelaksanaan
Proksi dinamik
Kod Pengubahsuaian
Penyusun
javac
Pengkompil khas ajc
kecekapan
lebih rendah (prestasi kehilangan refleksi masa larian)
kaedah yang lebih tinggi
Masa kompilasi, selepas kompilasi, masa pemuatan kelas
12. Apakah kitaran hidup Bean pada musim bunga
Kitaran hayat SpringBean secara kasar dibahagikan kepada 4 peringkat:
2."Fill attributes", tetapkan nilai kepada Bean
3.
"Initialization"
Jika sumber Aware akan dilaksanakan melalui antara muka kontenanya
Jika antara muka BeanPostProcessor dilaksanakan, peningkatan pra dan pasca pemprosesan antara muka akan dipanggil semulaJika kaedah kaedah init dikonfigurasikan, kaedah itu akan dilaksanakan
"Destroy"
Jika antara muka DisposableBean dilaksanakan, kaedah musnah antara muka akan dipanggil semula
Jika kaedah musnah dikonfigurasikan, kaedah yang dikonfigurasikan oleh kaedah musnah akan dikonfigurasikan
13.spring Bagaimana untuk menyelesaikan kebergantungan bulatan
🎜🎜🎜🎜🎜Kebergantungan bulat bermakna dua objek bergantung pada satu sama lain, membentuk panggilan cache pekeliling🎜 menyelesaikan pergantungan bulat. Logik terasnya ialah Pisahkan langkah-langkah instantiasi dan pemulaan, kemudian letakkannya dalam cache untuk dipanggil oleh objek lain🎜
"Cache peringkat pertama": Digunakan untuk menyimpan objek yang telah dijadikan instantiated dan dimulakan
"Cache peringkat kedua": Digunakan untuk menyimpan objek yang telah dijadikan instantiated tetapi tidak dimulakan
"Cache peringkat ketiga": Digunakan untuk menyimpan kilang objek dan menyediakan kelas dalaman tanpa nama untuk mencipta objek dalam cache tahap kedua
Apabila rujukan bulatan berlaku antara kelas A dan B Proses kasar
. Selepas A melengkapkan instantiasi, pergi ke "Buat kilang objek dan masukkan ke dalam cache peringkat ketiga"
Jika A diproksikan oleh AOP, maka apa yang diperoleh melalui kilang ini ialah Objek selepas A proksi
Jika A tidak diproksikan oleh AOP, maka apa yang diperoleh oleh kilang ini ialah objek yang dibuat oleh A
2. Apabila A melakukan suntikan atribut, pergi ke "Buat B"
.B memerlukan A untuk suntikan atribut, kemudian "Dapatkan objek proksi kilang A daripada cache peringkat ketiga"
dan suntikkannya, kemudian padamkan kilang A dalam cache peringkat ketiga dan letakkan objek A ke dalam peringkat kedua cache
4.B Lengkapkan suntikan atribut seterusnya sehingga permulaan selesai, dan masukkan B ke dalam cache peringkat pertama
5."A mendapatkan semula B daripada cache peringkat pertama dan menyuntik B"
, sehingga operasi seterusnya selesai, Padam A daripada cache peringkat kedua dan masukkan ke dalam cache peringkat pertama, dan kebergantungan bulat berakhir
🎜spring Terdapat dua prasyarat untuk menyelesaikan kebergantungan bulat:🎜
1."Bukan semua kaedah pembina"kebergantungan kitaran (jika tidak, operasi pemulaan dan instantiasi tidak boleh dipisahkan)
2."Mestilah singleton"(jika tidak ia tidak boleh dijamin sama objek)
14 Mengapa menggunakan cache peringkat ketiga tidak dapat menyelesaikannya
Ya, fungsi cache peringkat ketiga adalah untuk menjana objek proksi terlebih dahulu? hanya apabila kebergantungan bulat benar-benar berlaku, jika tidak Ia hanya akan "membuat kilang dan memasukkannya ke dalam cache peringkat ketiga", tetapi ia sebenarnya tidak akan mencipta objek melalui kilang ini.
Jika anda menggunakan cache tahap kedua untuk menyelesaikan kebergantungan bulat, ini bermakna semua biji mesti melengkapkan proksi AOP selepas instantiasi, yang "melanggar prinsip reka bentuk Spring" Spring direka pada langkah terakhir Bean kitaran hayat untuk melengkapkan proksi AOP dan bukannya melaksanakan proksi AOP serta-merta selepas instantiasi.
15. Apakah perbezaan antara @Autowired dan @Resource?
"@Resource ialah anotasi Java sendiri", @Resource mempunyai dua sifat dan jenis yang lebih penting ; Spring menyelesaikan atribut nama anotasi @Resource kepada nama kacang dan atribut jenis kepada jenis kacang. Jadi jika atribut nama digunakan, strategi suntikan automatik byName digunakan, dan apabila atribut jenis digunakan, strategi suntikan automatik byType digunakan. Jika nama mahupun atribut jenis tidak dinyatakan, strategi suntikan automatik byName akan digunakan melalui mekanisme pantulan.
"@Autowired ialah anotasi musim bunga", yang diperkenalkan pada versi spring2.5 Autowired hanya menyuntik berdasarkan jenis, "tidak sepadan dengan nama". Jika jenis tidak dapat mengenal pasti objek yang disuntik, ia perlu dihiasi dengan anotasi @Qualifier atau @Primary.
Apakah tahap pengasingan urus niaga bagi spring? s?
1.
「propagation_required」
Kaedah semasa "mesti dijalankan dalam konteks dengan transaksi"
akan dipanggil dijalankan dalam transaksi, jika tidak, transaksi akan dibuka semula.(Jika pengecualian berlaku pada bahagian yang dipanggil, kedua-dua belah panggilan dan urus niaga sebelah yang dipanggil akan ditarik balik)
2.「propagation_supports」
Kaedah semasa tidak perlu mempunyai konteks transaksi, tetapi jika terdapat Jika ia adalah transaksi, ia juga boleh dijalankan dalam transaksi ini
3.「propagation_mandatory」
mewakili kaedah semasa"mesti dijalankan ", jika tiada transaksi, ia akan dilemparkan Pengecualian
4.「propagation_nested」
Jika kaedah semasa mempunyai transaksi berjalan, kaedah tersebut harus dijalankan dalam ", urus niaga bersarang Boleh dilakukan atau ditarik balik secara bebas daripada urus niaga yang terkandung. Jika urus niaga yang dikapsulkan wujud dan urus niaga luar memberikan pengecualian kepada gulung balik, maka urus niaga dalaman mesti digulung semula Sebaliknya, urus niaga dalaman tidak menjejaskan transaksi luar. Jika transaksi yang dikapsulkan tidak wujud, ia adalah sama seperti propagation_required
5.「propagation_never」
Perkhidmatan semasa tidak sepatutnya dijalankan dalam transaksi. pengecualian dilemparkan "
6."propagation_requires_new"
Kaedah semasa"mesti dijalankan dalam transaksinya sendiri". Urus niaga baharu akan dimulakan dan jika terdapat urus niaga sedia ada berjalan, kaedah ini akan digantung semasa masa jalan sehingga transaksi baharu dilakukan atau ditarik balik.
7.「propagasi_tidak_disokong」
kaedah tidak boleh dijalankan dalam transaksi."Jika transaksi berjalan, ia akan digantung semasa tempoh berjalan, dan pelaksanaan tidak akan disambung semula sehingga transaksi dilakukan atau ditarik balik"
18.
1. -boot-autoconfigure.jar di bawah spring.factories, "Dapatkan Nama Kelas yang layak sepenuhnya untuk semua kacang berkaitan Spring"
3. Kemudian teruskan "Panggil penapis untuk menapis satu demi satu" dan tapis beberapa yang kami tidak perlukan.
Atas ialah kandungan terperinci 'Karangan Lapan Bahagian Temu Bual' Jilid 18 Spring. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kenyataan:
Artikel ini dikembalikan pada:Java后端技术全栈. Jika ada pelanggaran, sila hubungi admin@php.cn Padam