"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > حقن التبعية في التمهيد الربيعي: المعالج خلف الستار

حقن التبعية في التمهيد الربيعي: المعالج خلف الستار

تم النشر بتاريخ 2024-11-09
تصفح:745

Dependency Injection in Spring Boot: The Wizard Behind the Curtain

حقن التبعية في التمهيد الربيعي: المعالج خلف الستار

هل شعرت يومًا أن Spring Boot هو خادم شخصي سحري يعرف بطريقة ما ما تحتاجه ويقدمه لك على طبق من فضة؟ هذا في الأساس حقن التبعية (DI). من المحتمل أنك استخدمت DI مائة مرة دون أن تتوقف لتتساءل: كيف يعرف سبرينج ما يجب حقنه ومتى؟

إذا كان هذا يبدو مثلك، فمرحبًا بك على متن الطائرة! سنقوم بجولة ممتعة خلف الكواليس للتعرف على كيفية عمل Spring Boot's DI بسحرها، بدءًا من كيفية إدارتها للفاصوليا، @Autowired، ودورات حياة الحبة - من الولادة إلى التدمير. بحلول نهاية هذه المدونة، ستتمكن من استعراض معرفتك الجديدة في مجال DI مثل المحترفين.


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

بعبارات الشخص العادي، يشبه حقن التبعية توصيل البقالة إلى باب منزلك بدلاً من الخروج لشرائها بنفسك. يتعلق الأمر بتفويض مسؤولية "حقن" التبعيات (الفاصوليا) إلى Spring حتى لا تضطر إلى إنشاء كائنات يدويًا أو القلق بشأن دورة حياتها.

تخيل أنك طاهٍ تدير مطبخًا مزدحمًا (تطبيقك). ليس لديك وقت للنفاد والتقاط البيض والحليب والسكر في كل مرة تحتاج إليها. ألن يكون رائعًا إذا قام شخص ما (على سبيل المثال، Spring)

بطريقة سحرية بتسليم كل ما تحتاجه بالضبط عندما كنت في حاجة إليه؟

هذا بالضبط ما يفعله Spring DI: فهو يعثر على جميع المكونات (الفاصوليا) التي تحتاجها ويحقنها في الكود الخاص بك دون أن ترفع إصبعك. أنيق جدًا، أليس كذلك؟


سحر حاوية الربيع: خادمك الشخصي

حسنًا، هنا يحدث السحر. عند تشغيل تطبيق Spring Boot الخاص بك باستخدام SpringApplication.run()، يقوم Spring بتمهيد

ApplicationContext - فكر في الأمر على أنه دليل تعليمات كبير الخدم الخاص بك. فهو يعرف بالضبط ما يجب إحضاره ومتى.

دعونا نقسمها خطوة بخطوة:

  1. تهيئة الحاوية: عندما تضغط على SpringApplication.run()، تبدأ حاوية Spring (المعروفة أيضًا باسم ApplicationContext) في العمل. إنه مثل فتح أبواب مطعمك الافتراضي، حيث يكون كل شيء جاهزًا للتشغيل.

  2. إنشاء الفول: تقوم الحاوية بمسح التعليمات البرمجية الخاصة بك بحثًا عن التعليقات التوضيحية مثل @Component أو @Service أو @Repository أو @Controller. يصبح كل واحد منها فاصوليا - كائنًا يديره Spring. فكر فيها على أنها المكونات الأساسية في مطبخك: الدقيق والسكر والبيض وما إلى ذلك.

  3. BeanFactory to the Rescue: يستخدم Spring Boot BeanFactory لإنشاء هذه الحبوب وإدارتها. يعرف هذا المصنع بالضبط كيف ومتى يتم تصنيع حبوب القهوة الخاصة بك، مع التأكد من توفرها عند الحاجة.

  4. حقن التبعية: بمجرد أن تصبح الحبوب جاهزة، يقوم Spring بحقنها أينما قمت بوضع علامة @Autowired. إنه مثل وجود باريستا لا يقوم فقط بإعداد القهوة، بل يقوم أيضًا بتوصيلها إلى المنضدة المحددة حيثما تكون هناك حاجة إليها. ليس عليك حتى أن تفكر في الأمر، كل شيء فقط يظهر.


كيف يعمل @Autowired؟ شيرلوك هولمز من الفاصوليا

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

إليك كيفية العمل:

  • مطابقة النوع: عندما يرى Spring @Autowired، فإنه يبحث عن حبة من نفس النوع في الحاوية. تخيل أنك طلبت حبوب قهوة (فئة خدمة القهوة)، ونظر سبرينج في مستودع حبوب القهوة الخاص به وقال: "آه، لقد حصلت عليها! اسمحوا لي أن أحقنهم لك. "

  • المؤهلات: ولكن ماذا لو كان لديك عدة حبوب من نفس النوع؟ في هذه الحالة، قد يشعر سبرينج بالذعر ويطرح استثناءً مثل "NoUniqueBeanDefinitionException". لكن لا تقلق، يمكنك تهدئة Spring باستخدام @Qualifier لتحديد الحبوب التي تريد حقنها:

@Autowired @Qualifier("espressoBean") خدمة القهوة الخاصة خدمة القهوة؛
@Autowired
@Qualifier("espressoBean")
private CoffeeService coffeeService;
  • حقن المُنشئ (أفضل طريقة): في هذه الأيام، يعتبر حقن المُنشئ هو الطفل الرائع في الكتلة. فهو لا يجعل حبوبك غير قابلة للتغيير فحسب، بل يجعل الاختبار أيضًا أمرًا سهلاً. إليك كيفية القيام بذلك:
مقهى الطبقة العامة { خدمة القهوة النهائية الخاصة خدمة القهوة؛ @Autowired مقهى عام (CoffeeService CoffeeService) { this.coffeeService = CoffeeService; } }
@Autowired
@Qualifier("espressoBean")
private CoffeeService coffeeService;
يعمل الربيع على الطيران الآلي، ويحقن الفاصوليا في المُنشئ، وها أنت جاهز للانطلاق!


دورة حياة فول الربيع: من الولادة إلى حفلة التقاعد

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

  1. إنشاء مثيل (الميلاد): أولاً، يقوم Spring بإنشاء مثيل للفاصوليا. هذا مثل ولادة الفول. يقول الربيع: "تفضل أيها الرجل الصغير!" ويمرره في الحاوية.

  2. حقن التبعية: بعد إنشاء الحبة، يملأها الربيع بالتبعيات (مثل المكونات في وصفة الكعكة). هذا هو المكان الذي يأتي فيه دور @Autowired. تحصل حبوبك على كل ما تحتاجه للعمل بشكل صحيح.

  3. ما بعد التهيئة: إذا كان لديك طرق مشروحة باستخدام @PostConstruct، فإن Spring يستدعي تلك الطرق بعد أن يقوم بإدخال التبعيات. إنه مثل إعطاء الحبة طبقة جديدة من الطلاء قبل أن تذهب إلى العمل.

  4. جاهز للعمل: الآن أصبحت حبوبك حية وتنبض بالحياة. إنها جاهزة لمواجهة العالم!

  5. ما قبل التدمير (التقاعد): عندما يتم إيقاف تشغيل التطبيق، يستدعي Spring أساليب @PreDestroy لمنح الحبة مخرجًا رائعًا. هذه هي حفلة تقاعد الفاصوليا، حيث تقوم بتنظيف مواردها.

  6. تدمير الفول: أخيرًا، تم تدمير الحبة. حان وقت الراحة بسلام.

إليك كيفية تتبع أحداث دورة الحياة هذه في التعليمات البرمجية:


@عنصر الطبقة العامة CoffeeBean { @ما بعد البناء الفراغ العام onStart () { System.out.println("الفول جاهز لتحضير بعض القهوة!"); } @PreDestroy الفراغ العام onEnd () { System.out.println("الفول يتقاعد. وداعا أيها العالم!"); } }
@Component
public class CoffeeBean {

    @PostConstruct
    public void onStart() {
        System.out.println("Bean is ready to brew some coffee!");
    }

    @PreDestroy
    public void onEnd() {
        System.out.println("Bean is retiring. Goodbye, world!");
    }
}

نطاقات الفول: إلى متى يستمر السحر؟

ليست كل الحبوب لها نفس متوسط ​​العمر المتوقع. يسمح لك Spring Boot بتحديد

نطاقات مختلفة للفاصوليا - بشكل أساسي المدة التي تعيشها. النوعان الأكثر شيوعًا هما:

  • Singleton (الافتراضي): هناك مثيل واحد فقط للفاصوليا، مشترك عبر التطبيق بأكمله. إنه مثل وجود آلة إسبرسو واحدة للمقهى بأكمله.

  • النموذج الأولي: يتم إنشاء مثيل جديد للفاصوليا في كل مرة تكون هناك حاجة إليها. تخيل أن لديك ماكينة إسبرسو طازجة لكل طلب. إنها كثيفة الموارد، ولكنها ضرورية في بعض الأحيان.

@عنصر @النطاق("النموذج الأولي") الطبقة العامة LatteMachine { // هذه الحبة مصنوعة طازجة لكل استخدام }
@Component
public class CoffeeBean {

    @PostConstruct
    public void onStart() {
        System.out.println("Bean is ready to brew some coffee!");
    }

    @PreDestroy
    public void onEnd() {
        System.out.println("Bean is retiring. Goodbye, world!");
    }
}

SpringApplication.run(): المعلم الكبير لشركة DI

حسنًا، دعنا نتحدث عما يحدث عند تشغيل تطبيق Spring Boot باستخدام SpringApplication.run(). هذه الطريقة هي المعلم الكبير الذي يبدأ عملية DI بأكملها.

  1. بدء سياق التطبيق: يشعل الربيع ApplicationContext، حيث تعيش جميع الحبوب.
  2. المسح بحثًا عن الفاصوليا: يقوم Spring بمسح الكود الخاص بك بحثًا عن الفاصوليا وتسجيلها.
  3. حقن التبعيات: بمجرد أن تصبح الحبوب جاهزة، يبدأ Spring في حقنها أينما يتم استخدام @Autowired.
  4. تشغيل التطبيق: بمجرد أن يصبح كل شيء في مكانه الصحيح، يتم تشغيل التطبيق. اكتمل السحر.

تشبيه من الحياة الواقعية: DI في مقهى

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

كل ما عليك فعله هو تقديم الطلبات (إعداد حقول @Autowired الخاصة بك)، وسيتولى صانع القهوة الباقي - حيث يقوم بتحضير كوب القهوة المليء بالتبعية لعملائك (التطبيق) بشكل مثالي.


اختتام الأمر: DI هي قوتك العظمى

في نهاية المطاف،

حقن التبعية هو ما يجعل Spring Boot إطارًا قويًا. إنه يبسط حياتك، ويدير الفول الخاص بك، ويضمن سهولة صيانة الكود الخاص بك وتوسيعه.

الآن بعد أن ألقيت نظرة خاطفة على ما وراء الستار، لديك قوة خارقة يعتبرها العديد من المطورين أمرا مفروغا منه. هيا، ابدأ في استخدام DI مثل المعالج الذي أنت عليه الآن. وفي المرة القادمة التي ترى فيها @Autowired، ستعرف بالضبط ما يحدث تحت الغطاء.


آمل أن تمنحك هذه المدونة فهمًا أعمق لـ Spring Boot DI وأن تتركك مبتسمًا. اذهب الآن واحقن بعض الحبوب وأظهر لأصدقائك كيف يتم ذلك!


كيف يتم ذلك بالنسبة لمدونة ممتعة وغنية بالمعلومات وسهلة الفهم؟ اسمحوا لي أن أعرف إذا كنت تريد المزيد من التعديلات!

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/janisyed18/dependency-injection-in-spring-boot-the-wizard-behind-the-curtain-49n8?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3