Siapa pun yang telah mempelajari kerangka kerja musim semi pasti pernah mendengar tentang dua konsep Spring: IOC (inversi kontrol) dan DI (injeksi ketergantungan). Bagi mereka yang baru mengenal musim semi, mereka selalu merasa bahwa konsep IOC dan DI tidak jelas dan sulit dimengerti. Hari ini, saya akan berbagi dengan Anda beberapa pemahaman ahli teknis online tentang kerangka kerja musim semi IOC dan berbicara tentang pemahaman saya tentang IOC musim semi.
Apa itu IOC
IOC-InversionOfControl, yaitu, "Control Inversion", bukanlah teknologi, tetapi ide desain. Dalam pengembangan Java, IOC berarti memberikan objek yang Anda rancang untuk dikendalikan oleh wadah, daripada secara tradisional mengendalikannya langsung di dalam objek Anda.
IOC, yang merupakan inti dari musim semi, berjalan sepanjang waktu. Untuk kerangka kerja musim semi, Spring bertanggung jawab untuk mengendalikan siklus hidup suatu objek dan hubungan antara objek. Apa artinya ini? Untuk memberikan contoh sederhana, bagaimana kita menemukan pacar? Situasi umum adalah bahwa kita pergi ke mana-mana untuk melihat ke mana kita memiliki wanita cantik dan tampan, dan kemudian menanyakan tentang minat mereka, nomor QQ, nomor telepon, nomor IP, nomor IQ ..., temukan cara untuk mengenal mereka, memberi mereka apa yang mereka sukai, dan kemudian hehe ... proses ini kompleks dan mendalam, dan kita harus merancang dan menghadapi masing-masing tautan kita. Hal yang sama berlaku untuk pengembangan program tradisional. Dalam suatu objek, jika Anda ingin menggunakan objek lain, Anda harus mendapatkannya (baru sendiri, atau menanyakan satu dari JNDI). Setelah digunakan, objek harus dihancurkan (seperti koneksi, dll.), Dan objek akan selalu dikombinasikan dengan antarmuka atau kelas lain.
Bagaimana cara memahami IOC? Kunci untuk memahami IOC adalah untuk mengklarifikasi "siapa yang mengendalikan siapa, apa yang mengendalikan, mengapa itu adalah pembalikan (harus ada yang positif), dan aspek pembalikan apa yang ada di sana", mari kita analisis secara mendalam:
● Siapa yang mengendalikan siapa dan apa: desain pemrograman javase tradisional, kami membuat objek secara langsung melalui baru di dalam objek, dan program secara aktif membuat objek yang bergantung; Sementara IOC memiliki wadah khusus untuk membuat objek -objek ini, yaitu, wadah IOC mengontrol pembuatan objek; Siapa yang mengendalikan siapa? Tentu saja, wadah IOC mengontrol objek; Apa yang harus dikendalikan? Artinya, ini terutama mengontrol akuisisi sumber daya eksternal (bukan hanya objek termasuk file, dll.).
● Mengapa itu inversi? Aspek apa yang merupakan inversi: ada rotasi positif. Aplikasi tradisional dikendalikan secara aktif oleh diri kita sendiri dalam objek untuk secara langsung mendapatkan objek dependen, yaitu rotasi positif; Sementara inversi adalah wadah untuk membantu membuat dan menyuntikkan objek dependen; Mengapa inversi? Karena wadah membantu kita menemukan dan menyuntikkan objek yang bergantung, objek hanya secara pasif menerima objek dependen, jadi itu adalah inversi; Aspek apa inversi? Akuisisi objek dependen terbalik.
Mari kita gunakan legenda untuk menggambarkan bahwa pemrograman tradisional ditunjukkan pada Gambar 1-1, yang secara aktif menciptakan objek terkait dan kemudian menggabungkannya:
Gambar 1-1 Diagram skematik aplikasi tradisional
Ketika saya memiliki wadah IOC/DI, objek-objek ini tidak lagi secara aktif dibuat di kelas klien, seperti yang ditunjukkan pada Gambar 1-2:
Gambar 1-2 Diagram skematik dari struktur program setelah wadah IOC/DI memiliki wadah IOC/DI
1.1.2 Apa yang bisa dilakukan IOC
IOC bukan teknologi, itu hanya pemikiran, aturan penting pemrograman yang berorientasi objek, yang dapat memandu kita bagaimana merancang program yang lebih baik dan lebih baik. Aplikasi tradisional semuanya dibuat secara aktif oleh kami di dalam kelas, yang mengarah ke kopling tinggi antar kelas dan sulit untuk diuji; Dengan wadah IOC, kontrol membuat dan menemukan objek yang bergantung diserahkan ke wadah, dan wadah menyuntikkan objek gabungan, sehingga objek secara longgar digabungkan, yang juga nyaman untuk pengujian, memfasilitasi penggunaan kembali fungsional, dan yang lebih penting, membuat seluruh arsitektur program menjadi sangat fleksibel.
Faktanya, perubahan terbesar yang dibawa oleh IOC ke pemrograman bukan dari kode, tetapi dari perspektif ideologis, dan perubahan "transposisi master-slave". Aplikasi awalnya adalah bos, dan ia mengambil inisiatif untuk mendapatkan sumber daya apa pun. Namun, dalam ide IOC/DI, aplikasi menjadi pasif, dan dia secara pasif menunggu wadah IOC untuk membuat dan menyuntikkan sumber daya yang dibutuhkan.
IOC dengan baik mencerminkan salah satu aturan desain yang berorientasi objek - aturan Hollywood: "Jangan mencari kami, kami akan mencari Anda"; Artinya, wadah IOC membantu objek menemukan objek dependen yang sesuai dan menyuntikkannya, daripada objek yang secara aktif mencarinya.
1.1.3 IOC dan DI
Di-dependencyInjection, yaitu, "Injeksi Ketergantungan": Ketergantungan antara komponen ditentukan oleh wadah selama runtime. Secara kiasan, wadah secara dinamis menyuntikkan ketergantungan tertentu ke dalam komponen. Tujuan injeksi ketergantungan bukan untuk membawa lebih banyak fungsi ke sistem perangkat lunak, tetapi untuk meningkatkan frekuensi penggunaan kembali komponen dan membangun platform yang fleksibel dan dapat diskalakan untuk sistem. Melalui mekanisme injeksi ketergantungan, kita hanya perlu menentukan sumber daya yang diperlukan oleh target tanpa kode apa pun untuk menyelesaikan logika bisnis kita sendiri melalui konfigurasi sederhana, tanpa peduli dari mana sumber daya tertentu berasal dan siapa yang mengimplementasikannya.
Salah satu titik kunci IOC adalah secara dinamis menyediakan objek dengan objek lain yang dibutuhkan selama operasi sistem. Ini dicapai melalui DI (Injeksi Ketergantungan). Misalnya, Object A perlu mengoperasikan database. Di masa lalu, kami selalu menulis kode di A untuk mendapatkan objek koneksi. Dengan Spring, kita hanya perlu memberi tahu Spring bahwa koneksi diperlukan dalam A. Mengenai cara membangun koneksi ini dan kapan membangunnya, A tidak perlu tahu. Saat sistem berjalan, Spring akan membuat koneksi pada waktu yang tepat, dan kemudian menyuntikkannya ke dalam injeksi seperti, sehingga menyelesaikan kontrol hubungan antara masing -masing objek. Kebutuhan untuk mengandalkan koneksi untuk dijalankan secara normal, dan koneksi ini disuntikkan ke dalam musim semi, dan nama injeksi ketergantungan berasal dari ini. Jadi bagaimana DI diimplementasikan? Fitur penting setelah Java 1.3 adalah refleksi, yang memungkinkan program untuk secara dinamis menghasilkan objek, menjalankan metode objek, dan mengubah properti objek saat berjalan. Musim semi disuntikkan melalui refleksi.
Kunci untuk memahami DI adalah: "Siapa yang bergantung pada siapa, mengapa Anda perlu bergantung padanya, siapa yang menyuntikkan siapa, dan apa yang menyuntikkannya." Mari kita analisis secara mendalam:
● Siapa yang bergantung pada siapa: tentu saja, aplikasi tergantung pada wadah IOC;
● Mengapa dependensi diperlukan: Aplikasi memerlukan wadah IOC untuk menyediakan sumber daya eksternal yang diperlukan oleh objek;
● Siapa yang menyuntikkan siapa: jelas bahwa wadah IOC menyuntikkan objek aplikasi, objek yang bergantung pada aplikasi;
● Apa yang disuntikkan: Ini untuk menyuntikkan sumber daya eksternal (termasuk objek, sumber daya, dan data konstan) yang diperlukan untuk suatu objek.
Apa hubungan antara IOC dan DI? Bahkan, mereka dijelaskan dari sudut yang berbeda dari konsep yang sama. Karena konsep inversi kontrol relatif kabur (mungkin dipahami sebagai tingkat objek kontrol wadah, sulit untuk memikirkan siapa yang akan mempertahankan hubungan objek), pada tahun 2004, Master Martin Fowler memberikan nama baru: "Injeksi Ketergantungan". Dibandingkan dengan IOC, "Injeksi Ketergantungan" dengan jelas menggambarkan "objek yang disuntikkan tergantung pada objek ketergantungan konfigurasi kontainer IOC".
Meringkaskan
Bahkan, setiap orang memiliki pemahaman mereka sendiri tentang konsep IOC musim semi, dan tidak ada jawaban standar. Arah umumnya tepat.
Di atas adalah semua tentang memahami injeksi ketergantungan dan inversi kontrol di musim semi. Saya harap ini akan membantu semua orang. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!