ما هو حقن التبعية؟ - تعرف على كيفية تنفيذ حقن التبعية

هذه المقالة حول ما هو حقن التبعية هي دليل شامل لحقن التبعية من خلال التدريب العملي في حذاء الربيع.

في عالم نعمل فيه مع لغات البرمجة على أساس يومي ، نميل جميعًا إلى البحث عن الأساليب والحيل لجعل حياتنا سهلة. حسنًا ، Dependency Injection هو أحد هذه الأساليب التي تهدف إلى مساعدة كود المطور بسهولة من خلال توفير تبعيات لكائن آخر. في هذه المقالة حول ما هو حقن التبعية ، سأساعدك على فهم هذه التقنية بالتفصيل.

سيتم تناول الموضوعات التالية في هذه المقالة:





لذا ، فلنبدأ بهذه المقالة.

ما هو حقن التبعية؟

التبعية هي قدرة الكائن على توفير تبعيات كائن آخر.



الآن ، أنا متأكد من أنك ربما لم تفهم أي شيء من خلال التعريف الفني أعلاه. لذا دعني أوضح لك الالتباس.

عندما تسمع مصطلح التبعية ، ما الذي يخطر ببالك؟

من الواضح ، شيء ما يعتمد على شيء آخر للحصول على الدعم ، أليس كذلك؟



حسنًا ، هذا هو نفسه ، في حالة البرمجة أيضًا.

الاعتماد في البرمجة هو نهج يستخدم فيه الفصل وظائف محددة لفئة أخرى. لذلك ، على سبيل المثال ، إذا كنت تفكر في فئتين A و B ، وقلت أن الفئة A تستخدم وظائف الفئة B ، فهذا يعني ضمنيًا أن الفئة A لها تبعية للفئة B. الآن ، إذا كنت تقوم بالتشفير في Java ، فيجب أن تعرف هذا ، عليكقم بإنشاء مثيل للفئة B قبل أن يتم استخدام الكائنات بواسطة الفئة A.

أنواع الفصول - ما هو حقن التبعية - Edureka

لذلك ، إذا كان عليّ الآن تحديد حقن التبعية نيابة عنك ، فإن عملية إنشاء كائن لبعض الفئات الأخرى والسماح للفصل باستخدام التبعية مباشرة تسمى حقن التبعية. تتكون بشكل أساسي من ثلاث فئات:

  • فئة العميل: هذه هي الفئة التابعة وتعتمد على فئة الخدمة.

  • فئة الخدمة: توفر هذه الفئة خدمة لفئة العميل.

  • فئة الحاقن: هذه الفئة مسؤولة عن حقن كائن فئة الخدمة في فئة العميل

الآن ، بعد أن فهمت ، ما هو حقن التبعية ، دعني أخبرك بعد ذلك بالمبدأ الذي يعتمد عليه حقن التبعية.

قلب السيطرة

كما ذكرت أعلاه ، فإن انعكاس التحكم هو مبدأ يقوم على أساسه ، يتم حقن التبعية. أيضًا ، كما يوحي الاسم ، يتم استخدام عكس التحكم بشكل أساسي لعكس أنواع مختلفة من المسؤوليات الإضافية للفئة بدلاً من المسؤولية الرئيسية.

إذا كان علي أن أشرح لك بعبارات أبسط ، ففكر في مثال ، حيث لديك القدرة على الطهي. وفقًا لمبدأ IoC ، يمكنك عكس التحكم ، لذلك بدلاً من طهي الطعام ، يمكنك الطلب مباشرة من الخارج ، حيث تتلقى الطعام على عتبة داركم. وهكذا فإن عملية توصيل الطعام إليك عند عتبة داركم تسمى انعكاس التحكم.

لا يتعين عليك طهي الطعام بنفسك ، بدلاً من ذلك ، يمكنك طلب الطعام والسماح لمسؤول التوصيل بتوصيل الطعام لك. بهذه الطريقة ، لا يتعين عليك الاهتمام بالمسؤوليات الإضافية والتركيز فقط على العمل الرئيسي.

الآن ، بعد أن عرفت المبدأ الكامن وراء حقن التبعية ، دعني آخذك عبر أنواع حقن التبعية.

أنواع حقن التبعية

هناك ثلاثة أنواع أساسية من حقن التبعية:

  • حقن المنشئ: في هذا النوع من الحقن ، يوفر الحاقن التبعية من خلال مُنشئ فئة العميل.

  • حقن الواضع / حقن الخاصية: في هذا النوع من الحقن ، تقوم طريقة الحاقن بحقن التبعية لطريقة الضبط التي يعرضها العميل.

  • حقن الواجهة: في هذا النوع من الحقن ، يستخدم الحاقن Interface لتوفير التبعية لفئة العميل. يجب على العملاء تنفيذ واجهة تعرض ملفطريقة الواضعالتييقبل التبعية.

حتى الآن ، آمل أن تكون قد فهمت حقيقة أن Dependency Injection مسؤول عن إنشاء الكائنات ، وفهم الفئات التي تتطلب هذه الكائنات ، وفي النهاية تزويد هذه الفئات بالكائنات. لذا ، في هذه الملاحظة ، دعونا نلقي نظرة بعد ذلك على فوائد حقن التبعية.

فوائد حقن التبعية

قبل أن أسرد فوائد حقن التبعية ، دعني أوضح لك الحاجة إلى هذا الحقن على مستوى الصناعة ، لمساعدتك على فهم الفوائد بشكل أفضل.

ضع في اعتبارك سيناريو ، حيث لديك فئة بريد إلكتروني ، تكون مسؤوليتها الوحيدة هي الاهتمام برسائل البريد الإلكتروني المستلمة. الآن ، ستحتوي هذه الفئة على كائنات مثل 'إلى عنوان البريد الإلكتروني' و 'من عنوان البريد الإلكتروني' و 'الموضوع وجسم البريد الإلكتروني'.

كيفية استخدام الصلاحيات في جافا

الآن ، إذا أرادت الشركة حفظ الرسائل النصية والصوتية ، هل تعتقد أن هذا الفصل يمكنه حفظ الرسالة؟

حسنا، الجواب هو لا؟

وذلك لأن فئة البريد الإلكتروني لا يمكنها التعامل مع معلمات النص والرسائل الصوتية. في مثل هذه الحالات ، سيتعين عليك إعادة إنشاء الفصل. الآن ، تعد إعادة إنشاء الفصل مهمة مرهقة للغاية ، خاصةً إذا كان عليك القيام بها بانتظام. بدلاً من ذلك ، إذا كنت تستخدم Dependency Injection ، يمكنك تغيير الكائنات في وقت التشغيل. لذلك ، بهذه الطريقة ، لن تضطر إلى إعادة إنشاء الفصل الذي يساعدك في كثير من الطرق.

لذا ، إذا كان عليّ تلخيص فوائد حقن التبعية ، فإن الفوائد التالية هي:

كيف تطبع مصفوفة php

حسنًا ، الآن بعد أن عرفت فوائد حقن التبعية ، دعنا نمضي قدمًا ونرى كيفية تنفيذ حقن التبعية باستخدام Spring Boot.

كيف يتم تنفيذ DI باستخدام Spring Boot؟

الخطوة 1: افتح كسوف IDE وإنشاء ملف تطبيق Spring Boot عن طريق النقر بزر الماوس الأيمن والاختيار مشروع الربيع . ثم اذكر اسم المشروع واضغط على إنهاء .

للحصول على Spring Starter Project ، يجب عليك تثبيت Spring Tool Suite من Eclipse Marketplace. في حالة عدم تثبيت Spring Too Suite لديك ، يمكنك الرجوع إلى مقالتي على .

سترى تلقائيًا أنه تم إنشاء ملف التطبيق على النحو التالي.

الخطوة 2: بعد ذلك ، قم بإنشاء فصل دراسي في نفس الحزمة. للقيام بذلك ، انقر بزر الماوس الأيمن فوق الملف -> اختر صف دراسي واذكر ال اسم الفصل. ثم انقر فوق إنهاء . سيؤدي هذا إلى إنشاء ملف صف دراسي ملف. هنا قمت بإنشاء فئة العملاء. الرجوع أدناه.

الخطوه 3: بعد ذلك ، دعونا نضع بعض الخصائص للفصل. لذلك ، دعنا نقول ، نحن ندرج هوية العميل ، اسم العميل و اسم الدورة التدريبية. أذكر الرمز أدناه.

package com.example.demo // package name public class customers {private int custid private String custname private String coursename}

الخطوة 3.1: بمجرد الانتهاء من ذلك ، عليك أن تفعل توليد طرق Getter و Setter لهذه الخصائص. للقيام بذلك ، حدد هذه الخصائص وانقر بزر الماوس الأيمن. ثم اختر مصدر -> توليد طرق Getter و Setter.

يجب أن يكون الكود الخاص بك حتى الآن كما يلي:

package com.example.demo public class customers {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}}

الآن ، ضع في اعتبارك سيناريو حيث يتعين عليك إنشاء كائن للعملاء ولا تريد القيام بذلك يدويًا. في مثل هذا السيناريو ، سيتعين عليك بعد ذلك استخدام حقن التبعية ، للحصول على الكائنات متى احتجت إليها.

لذا ، دعونا ننظر بعد ذلك في كيفية تحقيق ذلك.

الخطوة الرابعة: أولاً ، قم بتغيير ملف خط التشغيل في ال ملف فئة التطبيق الى الآتى الى القادم الى الم:

سياق ConfigurableApplicationContext = SpringApplication.run (DemoApplication.class ، args)

ملاحظة: إذا تلقيت خطأ ، فاستورد ما يلي:

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

سيعيد سطر التعليمات البرمجية أعلاه كائنًا في وقت التنفيذ. الآن قم بإضافة الكود التالي إلى ملف التطبيق.

العملاء c = Context.getBean (customers.class)

السطر أعلاه ، سيطلب من المترجم إعادة كائن من فئة العميل. الرجوع أدناه.

الخطوة 4.1: الآن ، للتحقق مما إذا كان يعمل أم لا ، أنت يمكن العودة إلى فئة العملاء وأضف طريقة كما يلي:

عرض الفراغ العام () {System.out.println ('تم إرجاع الكائن بنجاح')}

ستعرض هذه الطريقة ناتجًا 'تم إرجاع الكائن بنجاح' عند التنفيذ الناجح.

الخطوة 4.2: بعد ذلك ، عليك العودة إلى ملف التطبيق وذكر ما يلي:

c.display ()

من خلال هذا ، تقوم باستدعاء كائن فئة العملاء بمرجع لطريقة العرض. راجع الصورة أدناه لمعرفة رمز فئة التطبيق حتى الآن:

الآن ، إذا قمت بتنفيذ المشروع ، فسترى ملف استثناء من عدم وجود نوع الفول المؤهل . هذا لأن فئة العميل التي حددتها ليست Spring Bean ، أي أنها ليست كائن Spring. الرجوع أدناه.

c ++ استدعاء بالإشارة

الخطوة 4.3: لذلك ، لإخبار Spring Container ، نحتاج إلى كائن من فئة العملاء. للقيام بذلك ، تحتاج إلى ذكر @ التعليق التوضيحي المكون ، في فئة العملاء. يجب أن يكون الكود في فئة العملاء على النحو التالي:

package com.example.demo import org.springframework.stereotype.ComponentComponent public class customers {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} فراغ عام display () {System.out.println ('تم إرجاع الكائن بنجاح')}}

ثم ، عندما تذكر العملاء c = Context.getBean (customers.class) سيتحقق المترجم مما إذا كان هناك فول عميل متاح في الحاوية أم لا.

إذا كان Bean متاحًا ، فإن إطار عمل Spring يقوم بحقن كائن العميل في تطبيقك. لذلك ، تم إنشاء هذا الكائن بشكل أساسي بواسطة إطار عمل Spring ، والذي يمكن استخدامه بشكل أكبر في التطبيق.

لذلك ، إذا قمت بتنفيذ هذا المشروع الآن ، فسترى ناتجًا أن الكائن تم إرجاعه بنجاح. الرجوع أدناه.

هذا هو الأساس الذي يمكنك من خلاله تنفيذ حقن التبعية.

مثال: حقن التبعية باستخدام التعليقات التوضيحية الموصلة تلقائيًا

أتمنى أن تكون قد فهمت كيف يعمل حقن التبعية في Spring Boot. الآن ، دعنا نوسع هذا المثال ونرى أيضًا كيف استخدمت فئة تعتمد على الفئة الأخرى وظائف تلك الفئة في Spring Boot.

الخطوة 1: إنشاء ملف ملف الفصل ، مرة أخرى النقر بزر الماوس الأيمن على الحزمة والاختيار جديد -> فئة. الآن ، اذكر اسم الفصل على النحو التالي وانقر فوق إنهاء.

الخطوة 2: بعد ذلك ، دعونا نضع بعض الخصائص للفصل. لذلك ، دعنا نقول ، نحن ندرج TechID ، Techname. أذكر الرمز أدناه.

package com.example.demo public class Technologies {private int techid private String techname}

الخطوة 2.1: بمجرد الانتهاء من ذلك ، قم بإنشاء طرق Getter و Setter لهذه الخصائص عن طريق النقر بزر الماوس الأيمن على الملف ثم اختيار المصدر -> إنشاء طرق Getter و Setter.

الخطوه 3: الآن ، دعنا نقول ، علينا إنشاء طريقة تطبع ' ناجح '. للقيام بذلك أذكر الرمز:

public void tech () {System.out.println ('Successful')}

يجب أن يبدو الرمز الخاص بك حتى الآن كما يلي:

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} public void setTechname (String techname) {this.techname = techname} public void tech () {System.out.println ('Successful')}}

الخطوة الرابعة: الآن ، لاستدعاء طريقة () في ال فئة العملاء ، عليك إنشاء كائن من فئة التقنيات. لذا اذكر السطر التالي من التعليمات البرمجية في فئة العملاء:

تفاصيل التقنيات الخاصة

الخطوة 4.1: بمجرد الانتهاء من ذلك ، قم بإنشاء طرق Getter و Setter لهذه الخصائص عن طريق النقر بزر الماوس الأيمن على الملف ثم اختر المصدر -> إنشاء طرق Getter و Setter.

الخطوة الخامسة: بعد ذلك ، لاستخدام ملف طريقة () عليك أن تذكر techdetail.tech () تحت طريقة عرض فئة العملاء . أيضًا ، للتأكد من أن كائن التفاصيل الفنية تم إنشاء مثيل له @ التعليق التوضيحي المكون هل فئة التقنيات. الرجوع أدناه.

الآن ، عند تنفيذ هذا المشروع ، سترى ملف استثناء المؤشر الفارغ . هذا لأنه الآن تعتمد فئة العملاء على فئة التقنيات ومع ذلك فهي لا تعرف وجود فئة التقنيات .

لذلك ، لتمكين العميل من التعرف على فئة التقنيات ، يجب عليك إدخال @ التعليق التوضيحي التلقائي في فئة العملاء. يجب أن يكون الرمز النهائي لفئة العملاء كما يلي:

package com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.ComponentComponent public class customers {private int custid private String custname private String coursenameAutowired private Technologies (getTechdetail public Technologies ) {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 () {return custname } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} public void display () {System.out.println ( 'تم إرجاع الكائن بنجاح') techdetail.tech ()}}

بمجرد تنفيذ هذه الملفات ، سترى المخرجات على أنها تم إرجاع الكائن بنجاح ونجاح ، مما يعني أن تبعية الفئات لدينا قد تحققت. الرجوع أدناه.

الآن بعد أن انتهيت من المقالة ، تحقق من من Edureka ، وهي شركة تعليمية موثوقة عبر الإنترنت مع شبكة تضم أكثر من 250000 متعلم راضٍ منتشرين في جميع أنحاء العالم.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات في هذا “ما هو حقن التبعية؟ ' مقالة - سلعة وسنعاود الاتصال بك في أقرب وقت ممكن.