حقن التبعية في التمهيد الربيعي: المعالج خلف الستار
هل شعرت يومًا أن Spring Boot هو خادم شخصي سحري يعرف بطريقة ما ما تحتاجه ويقدمه لك على طبق من فضة؟ هذا في الأساس حقن التبعية (DI). من المحتمل أنك استخدمت DI مائة مرة دون أن تتوقف لتتساءل: كيف يعرف سبرينج ما يجب حقنه ومتى؟
إذا كان هذا يبدو مثلك، فمرحبًا بك على متن الطائرة! سنقوم بجولة ممتعة خلف الكواليس للتعرف على كيفية عمل Spring Boot's DI بسحرها، بدءًا من كيفية إدارتها للفاصوليا، @Autowired، ودورات حياة الحبة - من الولادة إلى التدمير. بحلول نهاية هذه المدونة، ستتمكن من استعراض معرفتك الجديدة في مجال DI مثل المحترفين.
تخيل أنك طاهٍ تدير مطبخًا مزدحمًا (تطبيقك). ليس لديك وقت للنفاد والتقاط البيض والحليب والسكر في كل مرة تحتاج إليها. ألن يكون رائعًا إذا قام شخص ما (على سبيل المثال، Spring)
بطريقة سحرية بتسليم كل ما تحتاجه بالضبط عندما كنت في حاجة إليه؟
هذا بالضبط ما يفعله Spring DI: فهو يعثر على جميع المكونات (الفاصوليا) التي تحتاجها ويحقنها في الكود الخاص بك دون أن ترفع إصبعك. أنيق جدًا، أليس كذلك؟
ApplicationContext - فكر في الأمر على أنه دليل تعليمات كبير الخدم الخاص بك. فهو يعرف بالضبط ما يجب إحضاره ومتى.
دعونا نقسمها خطوة بخطوة:
تهيئة الحاوية: عندما تضغط على SpringApplication.run()، تبدأ حاوية Spring (المعروفة أيضًا باسم ApplicationContext) في العمل. إنه مثل فتح أبواب مطعمك الافتراضي، حيث يكون كل شيء جاهزًا للتشغيل.
إنشاء الفول: تقوم الحاوية بمسح التعليمات البرمجية الخاصة بك بحثًا عن التعليقات التوضيحية مثل @Component أو @Service أو @Repository أو @Controller. يصبح كل واحد منها فاصوليا - كائنًا يديره Spring. فكر فيها على أنها المكونات الأساسية في مطبخك: الدقيق والسكر والبيض وما إلى ذلك.
BeanFactory to the Rescue: يستخدم Spring Boot BeanFactory لإنشاء هذه الحبوب وإدارتها. يعرف هذا المصنع بالضبط كيف ومتى يتم تصنيع حبوب القهوة الخاصة بك، مع التأكد من توفرها عند الحاجة.
حقن التبعية: بمجرد أن تصبح الحبوب جاهزة، يقوم Spring بحقنها أينما قمت بوضع علامة @Autowired. إنه مثل وجود باريستا لا يقوم فقط بإعداد القهوة، بل يقوم أيضًا بتوصيلها إلى المنضدة المحددة حيثما تكون هناك حاجة إليها. ليس عليك حتى أن تفكر في الأمر، كل شيء فقط يظهر.
إليك كيفية العمل:
مطابقة النوع: عندما يرى Spring @Autowired، فإنه يبحث عن حبة من نفس النوع في الحاوية. تخيل أنك طلبت حبوب قهوة (فئة خدمة القهوة)، ونظر سبرينج في مستودع حبوب القهوة الخاص به وقال: "آه، لقد حصلت عليها! اسمحوا لي أن أحقنهم لك. "
المؤهلات: ولكن ماذا لو كان لديك عدة حبوب من نفس النوع؟ في هذه الحالة، قد يشعر سبرينج بالذعر ويطرح استثناءً مثل "NoUniqueBeanDefinitionException". لكن لا تقلق، يمكنك تهدئة Spring باستخدام @Qualifier لتحديد الحبوب التي تريد حقنها:
@Autowired @Qualifier("espressoBean") private CoffeeService coffeeService;
@Autowired @Qualifier("espressoBean") private CoffeeService coffeeService;يعمل الربيع على الطيران الآلي، ويحقن الفاصوليا في المُنشئ، وها أنت جاهز للانطلاق!
إنشاء مثيل (الميلاد): أولاً، يقوم Spring بإنشاء مثيل للفاصوليا. هذا مثل ولادة الفول. يقول الربيع: "تفضل أيها الرجل الصغير!" ويمرره في الحاوية.
حقن التبعية: بعد إنشاء الحبة، يملأها الربيع بالتبعيات (مثل المكونات في وصفة الكعكة). هذا هو المكان الذي يأتي فيه دور @Autowired. تحصل حبوبك على كل ما تحتاجه للعمل بشكل صحيح.
ما بعد التهيئة: إذا كان لديك طرق مشروحة باستخدام @PostConstruct، فإن Spring يستدعي تلك الطرق بعد أن يقوم بإدخال التبعيات. إنه مثل إعطاء الحبة طبقة جديدة من الطلاء قبل أن تذهب إلى العمل.
جاهز للعمل: الآن أصبحت حبوبك حية وتنبض بالحياة. إنها جاهزة لمواجهة العالم!
ما قبل التدمير (التقاعد): عندما يتم إيقاف تشغيل التطبيق، يستدعي Spring أساليب @PreDestroy لمنح الحبة مخرجًا رائعًا. هذه هي حفلة تقاعد الفاصوليا، حيث تقوم بتنظيف مواردها.
تدمير الفول: أخيرًا، تم تدمير الحبة. حان وقت الراحة بسلام.
@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!"); } }
نطاقات مختلفة للفاصوليا - بشكل أساسي المدة التي تعيشها. النوعان الأكثر شيوعًا هما:
Singleton (الافتراضي): هناك مثيل واحد فقط للفاصوليا، مشترك عبر التطبيق بأكمله. إنه مثل وجود آلة إسبرسو واحدة للمقهى بأكمله.
النموذج الأولي: يتم إنشاء مثيل جديد للفاصوليا في كل مرة تكون هناك حاجة إليها. تخيل أن لديك ماكينة إسبرسو طازجة لكل طلب. إنها كثيفة الموارد، ولكنها ضرورية في بعض الأحيان.
@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!"); } }
كل ما عليك فعله هو تقديم الطلبات (إعداد حقول @Autowired الخاصة بك)، وسيتولى صانع القهوة الباقي - حيث يقوم بتحضير كوب القهوة المليء بالتبعية لعملائك (التطبيق) بشكل مثالي.
حقن التبعية هو ما يجعل Spring Boot إطارًا قويًا. إنه يبسط حياتك، ويدير الفول الخاص بك، ويضمن سهولة صيانة الكود الخاص بك وتوسيعه.
الآن بعد أن ألقيت نظرة خاطفة على ما وراء الستار، لديك قوة خارقة يعتبرها العديد من المطورين أمرا مفروغا منه. هيا، ابدأ في استخدام DI مثل المعالج الذي أنت عليه الآن. وفي المرة القادمة التي ترى فيها @Autowired، ستعرف بالضبط ما يحدث تحت الغطاء.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3