الوحدة 5 - Spring Core: IoC و DI متقدم
مرحبًا بكم في الوحدة 5! 🎯
لقد استخدمت حقن التبعيات في الوحدات السابقة، لكن هل تفهم حقًا كيف يعمل؟
هذه الوحدة تكشف لك الأسرار الداخلية لـ Spring وتجعلك مستقلاً في التعامل مع أي موقف لحقن التبعيات.
🎓 أهداف التعلم
في نهاية هذه الوحدة، ستكون قادرًا على:
- ✅ شرح ما هو عكس التحكم (IoC)
- ✅ إتقان الأنواع الثلاثة لحقن التبعيات
- ✅ إنشاء وإدارة Beans في Spring
- ✅ استخدام النطاقات المناسبة (@Singleton, @Prototype)، إلخ.
- ✅ تكوين Spring باستخدام @Configuration و @Bean
- ✅ إدارة ملفات التعريف (dev، test، prod)
📚 المتطلبات المسبقة
قبل بدء هذه الوحدة، يجب أن تكون قد:
- ✅ أكملت الوحدات من 1 إلى 4
- ✅ استخدمت الحقن عبر المنشئ في تدريباتك
- ✅ فهمت بنية الطبقات الثلاث (Controller، Service، Repository)
إذا لم تكن هذه المتطلبات مستوفاة، عد إلى الوحدات السابقة!
🗺️ خطة الوحدة
الجزء النظري (4 فصول)
الفصل 1: عكس التحكم (IoC)
المدة: 30 دقيقة
المحتوى:
- ما هو IoC؟
- مشكلة الترابط القوي
- كيف يحل Spring هذه المشكلة
- حاوية Spring (ApplicationContext)
لماذا هو مهم؟ فهم المبدأ الأساسي لـ Spring
الفصل 2: حقن التبعيات (DI)
المدة: 45 دقيقة
المحتوى:
- الأنواع الثلاثة للحقن (المنشئ، setter، الحقل)
- لماذا يفضل الحقن عبر المنشئ
- @Autowired, @Inject, @Resource
- التبعيات الاختيارية
لماذا هو مهم؟ اختيار الطريقة الصحيحة للحقن
الفصل 3: Beans وسياق Spring
المدة: 45 دقيقة
المحتوى:
- ما هو Bean؟
- @Component, @Service, @Repository, @Controller
- @Bean و @Configuration
- تسمية beans
- @Qualifier و @Primary
لماذا هو مهم؟ إتقان إنشاء وإدارة كائنات Spring
الفصل 4: النطاقات والتكوين
المدة: 45 دقيقة
المحتوى:
- النطاقات: @Singleton, @Prototype
- نطاقات الويب: @RequestScope, @SessionScope
- تكوين Java مقابل XML
- ملفات التعريف (@Profile) لـ dev/test/prod
- @ComponentScan
لماذا هو مهم؟ التحكم في دورة الحياة والتكوين
الجزء العملي (3 تدريبات)
TP5.1: حقن التبعيات المتقدم
المدة: 1h30
الهدف: إتقان الأنواع المختلفة للحقن
ستقوم بإنشاء:
- خدمات متعددة بطرق حقن مختلفة
- إدارة التبعيات الدائرية
- استخدام @Qualifier لاختيار التنفيذ
TP5.2: Beans والنطاقات
المدة: 1h30
الهدف: فهم النطاقات وتأثيرها
ستقوم بإنشاء:
- Beans بنطاقات مختلفة
- اختبار @Singleton مقابل @Prototype
- إنشاء beans مخصصة باستخدام @Bean
TP5.3: التكوين حسب الملفات الشخصية
المدة: 1h30
الهدف: إدارة بيئات متعددة
ستقوم بإنشاء:
- تكوين لـ dev، test، prod
- Beans مشروطة حسب ملف التعريف
- application-{profile}.properties
📊 المدة الإجمالية
| النوع | المدة |
|---|---|
| النظرية | 2h45 (4 فصول) |
| العملي | 4h30 (3 تدريبات) |
| الإجمالي | 7h15 (~2-3 جلسات) |
🎯 ما ستفهمه
قبل هذه الوحدة
// كنت تكتب هذا دون أن تفهم حقًا:
@Service
public class MyService {
private final MyRepository repo;
public MyService(MyRepository repo) {
this.repo = repo;
}
}
أسئلة بلا إجابات:
- لماذا @Service؟
- كيف يعرف Spring أنه يجب إنشاء MyRepository؟
- لماذا الحقن عبر المنشئ؟
- متى يتم إنشاء هذه الكائنات؟
بعد هذه الوحدة
// ستفهم كل شيء:
@Service // ← Spring يدير هذا bean (singleton افتراضيًا)
public class MyService {
private final MyRepository repo; // ← غير قابل للتغيير (ممارسة جيدة)
// ← الحقن عبر المنشئ (موصى به)
public MyService(MyRepository repo) {
this.repo = repo; // ← Spring يحقن تلقائيًا
}
}
ستعرف:
- ✅ كيف ينشئ Spring ويدير الكائنات
- ✅ متى تستخدم @Component, @Service, @Repository
- ✅ كيفية إدارة تنفيذات متعددة
- ✅ كيفية التكوين لبيئات مختلفة
- ✅ النطاقات المختلفة وفائدتها
🚀 لماذا هذه الوحدة مهمة
1. فهم الأسس
Spring Boot "يخفي" الكثير من التعقيد مع تكوينه التلقائي. هذا جيد للبدء بسرعة، لكن يجب أن تفهم ما يحدث "تحت الغطاء".
مثال ملموس:
خطأ شائع: "No qualifying bean of type X found"
بدون هذه الوحدة: 😰 تبحث في StackOverflow
مع هذه الوحدة: 😎 تفهم وتحل المشكلة في دقيقتين
2. كتابة كود احترافي
المطورون المبتدئون ينسخون الكود دون فهم.
المطورون المحترفون يفهمون ويكيفون حسب السياق.
هذه الوحدة تجعلك تنتقل من مبتدئ إلى محترف في Spring Core.
3. التحضير للمقابلات
الأسئلة حول IoC، DI، و beans في Spring هي شائعة جدًا في المقابلات التقنية.
أسئلة نموذجية:
- "اشرح عكس التحكم"
- "ما الفرق بين @Component و @Bean؟"
- "متى تستخدم @Qualifier؟"
- "اشرح نطاقات beans"
بعد هذه الوحدة، سيكون لديك جميع الإجابات!
🗺️ التقدم في الدورة
الوحدة 1: مقدمة في Spring Boot
الوحدة 2: الخطوات الأولى (Initializr، الهيكل، التكوين)
الوحدة 3: بنية الطبقات الثلاث
الوحدة 4: قواعد البيانات في الإنتاج
الوحدة 5: ← أنت هنا - Spring Core (IoC/DI)
فهم الأسس
الوحدة 6: Spring Data JPA متقدم
الوحدة 7+: مفاهيم متقدمة
الوحدة 5 = اللحظة التي تفهم فيها Spring حقًا!
📖 كيفية التعامل مع هذه الوحدة
النظرية قبل التطبيق
-
اقرأ الفصول النظرية الأربعة بالترتيب
- لا تتخطى أي فصل
- خذ ملاحظات
- اختبر الأمثلة الصغيرة
-
قم بالتدريبات بالترتيب
- TP5.1: الحقن
- TP5.2: Beans والنطاقات
- TP5.3: التكوين
-
راجع ملخص كل فصل
الوقت الموصى به
الخيار المكثف (عطلة نهاية أسبوع واحدة):
- صباح السبت: الفصول 1 و 2 + TP5.1
- بعد ظهر السبت: الفصل 3 + TP5.2
- صباح الأحد: الفصل 4 + TP5.3
- بعد ظهر الأحد: المراجعة والتمارين
الخيار التدريجي (جلستان):
- الجلسة 1: الفصول 1-2 + TP1
- الجلسة 2: الفصول 3-4 + TP5.2 و TP5.3
✅ التقييم الذاتي
قبل البدء، أجب:
- هل تعرف ما يعنيه IoC؟ ☐ نعم ☐ لا
- هل تعرف الأنواع الثلاثة للحقن؟ ☐ نعم ☐ لا
- هل تفهم الفرق بين @Component و @Bean؟ ☐ نعم ☐ لا
- هل تعرف ما هو نطاق bean؟ ☐ نعم ☐ لا
إذا أجبت "لا" على سؤال واحد → هذه الوحدة لك!
بعد الوحدة، أعد هذا الاختبار. يجب أن تجيب "نعم" على الكل!
🎯 الخطوة التالية
جاهز لفهم Spring بعمق؟
➡️ ابدأ مع الفصل 1: عكس التحكم