Apakah Suntikan Ketergantungan? - Ketahui Cara Melaksanakan Suntikan Ketergantungan



Artikel ini mengenai Apa itu Dependency Injection adalah panduan komprehensif untuk Dependency Injection dengan Hands-On in Spring Boot.

Di dunia di mana kita bekerja dengan bahasa pengaturcaraan setiap hari, kita semua cenderung mencari kaedah dan trik untuk menjadikan hidup kita mudah. Nah, Dependency Injection adalah salah satu teknik yang bertujuan untuk membantu kod pembangun dengan mudah dengan memberikan kebergantungan pada objek lain. Dalam artikel ini mengenai Apa itu Ketergantungan Suntikan, saya akan membantu anda memahami teknik ini secara terperinci.

Topik berikut akan dibahas dalam artikel ini:





Oleh itu, mari mulakan dengan artikel ini.

Apa itu Suntikan Ketergantungan?

Dependency Injection adalah kemampuan objek untuk membekalkan kebergantungan objek lain.



Sekarang, saya cukup yakin, anda mungkin tidak memahami apa-apa dengan definisi teknikal di atas. Oleh itu, izinkan saya membersihkan kekeliruan untuk anda.

Apabila anda mendengar istilah ketergantungan, apa yang terlintas di fikiran anda?

Jelas, sesuatu yang bergantung pada yang lain untuk sokongan bukan?



Nah, itu sama, dalam hal pengaturcaraan juga.

Ketergantungan dalam pengaturcaraan adalah pendekatan di mana kelas menggunakan fungsi khusus kelas lain. Oleh itu, sebagai contoh, jika anda mempertimbangkan dua kelas A dan B, dan mengatakan bahawa kelas A menggunakan fungsi kelas B, maka tersirat bahawa kelas A mempunyai kebergantungan kelas B. Sekarang, jika anda membuat pengekodan di Java maka anda mesti tahu itu, anda mestibuat contoh kelas B sebelum objek digunakan oleh kelas A.

Jenis Kelas - Apa itu Suntikan Ketergantungan - Edureka

Jadi, jika saya sekarang harus menentukan Dependency Injection untuk anda, maka proses membuat objek untuk beberapa kelas lain dan membiarkan kelas tersebut secara langsung menggunakan ketergantungan disebut Dependency Injection. Ia mempunyai tiga kelas yang terlibat:

  • Kelas Pelanggan: Ini adalah kelas bergantung dan bergantung pada kelas Perkhidmatan.

  • Kelas Perkhidmatan: Kelas ini memberikan perkhidmatan kepada kelas pelanggan.

  • Kelas Penyuntik: Kelas ini bertanggungjawab untuk memasukkan objek kelas perkhidmatan ke kelas pelanggan

Sekarang, setelah anda memahami, apa itu Dependency Injection, izinkan saya membimbing anda melalui prinsip di mana Dependency Injection didasarkan.

Pembalikan Kawalan

Seperti yang telah saya nyatakan di atas, Inversion of Control adalah prinsip yang berdasarkannya, Dependency Injection dibuat. Juga, seperti namanya, Inversion of Control pada dasarnya digunakan untuk membalikkan pelbagai jenis tanggungjawab tambahan daripada tanggungjawab utama.

Sekiranya saya harus menerangkan anda dengan lebih sederhana, maka pertimbangkan satu contoh, di mana anda mempunyai kemampuan memasak. Menurut prinsip IoC, anda boleh menukar kawalan, jadi daripada memasak makanan, anda boleh memesan secara langsung dari luar, di mana anda menerima makanan di depan pintu anda. Oleh itu, proses makanan yang dihantar kepada anda di depan pintu anda dinamakan Pembalikan Kawalan.

Anda tidak perlu memasak sendiri, sebaliknya, anda boleh memesan makanan dan membiarkan eksekutif penghantaran, menghantar makanan untuk anda. Dengan cara ini, anda tidak perlu mengurus tanggungjawab tambahan dan hanya fokus pada pekerjaan utama.

cara menukar dua kali ganda ke int

Sekarang, setelah anda mengetahui prinsip di sebalik Dependency Injection, izinkan saya membimbing anda melalui jenis Dependency Injection.

Jenis Suntikan Ketergantungan

Terdapat terutamanya tiga jenis Suntikan Ketergantungan:

  • Suntikan Pembina: Dalam suntikan jenis ini, penyuntik membekalkan kebergantungan melalui pembina kelas pelanggan.

  • Suntikan Setter / Suntikan Harta: Dalam suntikan jenis ini, kaedah penyuntik menyuntik kebergantungan kepada kaedah setter yang didedahkan oleh klien.

  • Suntikan antara muka: Dalam suntikan jenis ini, penyuntik menggunakan Antaramuka untuk memberikan kebergantungan kepada kelas pelanggan. Pelanggan mesti melaksanakan antara muka yang akan memaparkan akaedah setteryang manamenerima kebergantungan.

Sampai sekarang, saya harap anda memahami hakikat bahawa Dependency Injection bertanggungjawab untuk membuat objek, memahami kelas mana yang memerlukan objek tersebut dan akhirnya menyediakan kelas tersebut dengan objek tersebut. Oleh itu, mari kita perhatikan faedah Dependency Injection.

Faedah Suntikan Ketergantungan

Sebelum saya menyenaraikan faedah Dependency Injection, izinkan saya menjelaskan kepada anda perlunya suntikan ini pada peringkat industri, untuk membantu anda memahami faedahnya dengan lebih baik.

Pertimbangkan senario, di mana anda mempunyai Kelas E-mel, yang bertanggungjawab sepenuhnya untuk menjaga e-mel yang diterima. Sekarang, kelas ini akan mempunyai objek seperti 'Ke alamat e-mel', 'Dari alamat e-mel', 'Subjek dan Badan e-mel'.

Sekarang, jika syarikat itu ingin menyimpan mesej teks dan audio, adakah anda fikir kelas ini dapat menyimpan mesej tersebut?

Nah, jawapannya tidak?

Ini kerana, Kelas E-mel tidak dapat menangani parameter teks dan mesej audio. Sekiranya demikian, anda perlu membuat kelas semula. Sekarang, mencipta semula kelas adalah tugas yang tidak membebankan, terutamanya jika anda harus kerap melakukannya. Sebaliknya, jika anda menggunakan Dependency Injection, anda boleh menukar objek pada waktu berjalan. Oleh itu, dengan cara ini, anda tidak perlu membuat kelas yang lebih banyak membantu anda dengan banyak cara.

Jadi, Sekiranya saya harus meringkaskan faedah suntikan Ketergantungan, maka berikut adalah faedahnya:

Baiklah, jadi sekarang setelah anda mengetahui faedah Dependency Injection, mari kita terus maju dan melihat bagaimana melaksanakan Dependency Injection menggunakan Spring Boot.

Bagaimana Melaksanakan DI menggunakan Spring Boot?

Langkah 1: Buka anda Gerhana IDE dan buat a Permohonan Spring Boot dengan mengklik kanan dan memilih Projek Permulaan Musim Bunga . Kemudian sebutkan nama projek dan klik pada Selesai .

Untuk mendapatkan Spring Starter Project, anda harus memasang Spring Tool Suite dari Eclipse Marketplace. Sekiranya anda tidak memasang Spring Too Suite, anda boleh merujuk artikel saya di .

Anda secara automatik akan melihat bahawa fail aplikasi dibuat seperti di bawah.

Langkah 2: Seterusnya, buat kelas dalam pakej yang sama. Untuk melakukannya, klik kanan fail -> pilih Kelas dan sebutkan nama kelas. Kemudian klik pada Selesai . Ini akan mewujudkan a Kelas fail. Di sini saya telah membuat kelas Pelanggan. Rujuk di bawah.

Langkah 3: Selepas itu, mari kita masukkan beberapa sifat untuk kelas. Oleh itu, katakanlah, kami merangkumi ID Pelanggan, Nama pelanggan dan Nama kursus. Sebutkan kod di bawah.

package com.example.demo // nama pakej kelas awam Pelanggan {private int custid private String custname private String coursename}

Langkah 3.1: Sebaik sahaja anda selesai dengan itu, anda harus menjana kaedah Getter dan Setter untuk sifat-sifat ini. Untuk melakukannya, pilih sifat ini dan klik kanan. Kemudian pilih Sumber -> Hasilkan kaedah Getter dan Setter.

Kod anda hingga sekarang hendaklah seperti berikut:

pakej com.example.demo kelas awam Pelanggan {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String nama nama) {this.coursename = coursename}}

Sekarang, pertimbangkan senario di mana anda harus membuat objek untuk Pelanggan dan anda tidak mahu melakukannya secara manual. Dalam senario seperti itu, anda kemudian harus menggunakan Dependency Injection, untuk mendapatkan objek setiap kali anda memerlukannya.

Oleh itu, mari kita lihat bagaimana kita dapat mencapainya.

Langkah 4: Pertama, ubah garis larian di dalam fail kelas aplikasi kepada yang berikut:

ConfigurableApplicationContext konteks = SpringApplication.run (DemoApplication.class, args)

Catatan: Sekiranya anda mendapat ralat, import yang berikut:

import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.context.ConfigurableApplicationContext

Baris kod di atas ini akan mengembalikan objek pada masa pelaksanaan. Sekarang tambahkan kod berikut ke dalam fail aplikasi.

pelanggan c = konteks.getBean (pelanggan.kelas)

Garis di atas, akan memberitahu penyusun untuk mengembalikan objek kelas pelanggan. Rujuk di bawah.

pemutus jenis eksplisit dalam java

Langkah 4.1: Sekarang, untuk memeriksa sama ada ia berfungsi atau tidak, anda boleh kembali ke kelas Pelanggan dan tambahkan kaedah seperti berikut:

paparan kekosongan awam () {System.out.println ('Objek Dikembalikan Berjaya')}

Metode ini akan menampilkan output 'Objek Dikembalikan Berjaya' pada pelaksanaan yang berhasil.

Langkah 4.2: Seterusnya, anda harus kembali ke fail aplikasi dan sebutkan perkara berikut:

c. paparan ()

Melalui ini, anda memanggil objek kelas Pelanggan dengan rujukan kaedah paparan. Rujuk gambar di bawah untuk kod kelas Aplikasi hingga sekarang:

Sekarang, jika anda melaksanakan projek, anda akan melihatnya pengecualian Tiada kacang jenis yang layak . Ini kerana kelas pelanggan yang telah anda tentukan bukan Spring Bean, bukan Spring Spring. Rujuk di bawah.

Langkah 4.3: Jadi, untuk memberitahu Spring Container bahawa, kita memerlukan objek Kelas pelanggan. Untuk melakukan itu, anda perlu menyebutnya @Anotasi komponen , di kelas Pelanggan. Kod dalam kelas Pelanggan hendaklah seperti di bawah:

pakej com.example.demo import org.springframework.stereotype.Component @Component public class Pelanggan {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname} public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} kekosongan awam paparan () {System.out.println ('Objek Dikembalikan Berjaya')}}

Kemudian, apabila anda menyebut pelanggan c = konteks.getBean (pelanggan.kelas) penyusun akan memeriksa sama ada terdapat kacang pelanggan yang terdapat di dalam bekas atau tidak.

Sekiranya Bean tersedia, maka rangka Spring menyuntik objek pelanggan dalam aplikasi anda. Jadi, pada dasarnya, objek ini dibuat oleh rangka Spring, yang dapat digunakan lebih lanjut dalam aplikasi.

Jadi, jika saya melaksanakan projek ini sekarang, anda akan melihat output yang Objek Dikembalikan Berjaya. Rujuk di bawah.

Ini pada asasnya bagaimana anda dapat melaksanakan Dependency Injection.

Contoh: Suntikan Ketergantungan Menggunakan Anotasi Autowired

Saya harap anda telah memahami bagaimana Dependency Injection berfungsi di Spring Boot. Sekarang, marilah kita memaparkan contoh ini dan melihat lebih jauh bagaimana kelas yang bergantung pada kelas lain menggunakan fungsi kelas tersebut di Spring Boot.

Langkah 1: Buat yang baru fail kelas , oleh sekali lagi klik kanan pada pakej dan dengan memilih Baru -> Kelas. Sekarang, sebutkan nama kelas seperti di bawah dan klik Selesai.

Langkah 2: Seterusnya, mari kita masukkan beberapa sifat untuk kelas. Oleh itu, katakanlah, kami merangkumi TechID, Techname. Sebutkan kod di bawah.

pakej com.example.demo teknologi kelas awam {private int techid private String techname}

Langkah 2.1: Setelah anda selesai dengan itu, hasilkan Kaedah Getter dan Setter untuk sifat-sifat ini dengan mengklik kanan pada fail dan kemudian pilih Sumber -> Hasilkan kaedah Getter dan Setter.

Langkah 3: Sekarang, katakanlah, kita harus membuat kaedah yang mencetak “ Berjaya '. Untuk melakukan itu, sebutkan kodnya:

teknologi kekosongan awam () {System.out.println ('Berjaya')}

Kod anda sehingga sekarang akan kelihatan seperti di bawah:

package com.example.demo public class Technologies {private int techid private String techname public int getTechid () {return techid} public void setTechid (int techid) {this.techid = techid} public String getTechname () {return techname} kekosongan awam setTechname (String techname) {this.techname = techname} awam kosong teknologi () {System.out.println ('Berjaya')}}

Langkah 4: Sekarang, untuk memanggil kaedah teknologi () di dalam kelas pelanggan , anda mesti membuat objek kelas teknologi. Oleh itu, sebutkan kod berikut di kelas pelanggan:

maklumat teknikal teknologi swasta

Langkah 4.1: Setelah selesai dengan itu, hasilkan Kaedah Getter dan Setter untuk harta tanah ini oleh klik kanan pada fail dan kemudian pilih Sumber -> Hasilkan kaedah Getter dan Setter.

Langkah 5: Seterusnya, untuk menggunakan kaedah teknologi () , anda mesti sebutkan techdetail.tech () di bawah kaedah paparan kelas pelanggan . Juga, untuk memastikan bahawa objek techdetail disebutkan @Anotasi komponen adalah Kelas teknologi. Rujuk di bawah.

Sekarang, apabila anda melaksanakan projek ini, anda akan melihat a Pengecualian Penunjuk Null . Ini kerana sekarang Kelas pelanggan Bergantung pada kelas Teknologi namun ia tidak mengetahui kewujudan kelas Teknologi .

Oleh itu, untuk membolehkan Pelanggan mengenali kelas Teknologi, anda mesti memasukkan @ Anotasi yang diperlukan di kelas Pelanggan. Kod akhir kelas pelanggan anda hendaklah seperti berikut:

rentetan hingga penukaran tarikh di java
pakej com.example.demo import org.springframework.beans.factory.annotation.Autport import org.springframework.stereotype.Component @Component public class Pelanggan {private int custid private String custname private String coursename @Autowired private Technologies techdetail public Technologies getTechdet ) {return techdetail} public void setTechdetail (Technologies techdetail) {this.techdetail = techdetail} public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {nama pengembalian } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} paparan kekosongan awam () {System.out.println ( 'Objek Dikembalikan Berjaya') techdetail.tech ()}}

Setelah anda melaksanakan fail-fail ini, anda akan melihat hasilnya sebagai Objek Dikembalikan Berjaya dan Berjaya, yang menunjukkan bahawa Ketergantungan kelas kami telah terpenuhi. Rujuk di bawah.

Sekarang setelah anda selesai dengan artikel, lihat oleh Edureka, sebuah syarikat pembelajaran dalam talian yang dipercayai dengan rangkaian lebih daripada 250,000 pelajar berpuas hati yang tersebar di seluruh dunia.

Ada soalan untuk kami? Tolong sebutkan di bahagian komen dari “Apa itu Dependency Injection? ' artikel dan kami akan menghubungi anda secepat mungkin.