حاوية حقن التبعية لجافا: Spring IoC و Google Guice و Dagger

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

حاوية حقن التبعية لجافا: نظرة عامة ومقارنة للحلول الشائعة



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



في هذه المقالة، سنستعرض ثلاث من أشهر حاويات DI لجافا: Spring IoC (جزء من Spring Framework)، Google Guice و Dagger. لكل منها خصائصه وفلسفته ومجال استخدامه. ستتعرف على كيفية عملها، وما هي نقاط القوة والضعف لكل منها، وأي حاوية تختار لمشروعك.



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



حاوية DI هي برنامج (أو مكتبة) تعمل على أتمتة إنشاء الكائنات وتبعياتها. تصف الفئات التي يجب إنشاؤها وكيفية ارتباطها، وتتولى الحاوية العمل الروتيني للإنشاء والتكوين والحقن. المهام الرئيسية للحاوية:



  • إنشاء الكائنات - تقوم الحاوية بإنشاء نسخ من الفئات عند الطلب.
  • إدارة دورة الحياة - تحدد متى يتم إنشاء الكائن ومتى يعيش ومتى يتم تدميره (singleton, prototype, request-scope).
  • حل التبعيات - تجد تلقائيًا وتحقن الكائنات المطلوبة في المنشئات أو الحقول أو الطرق.
  • التكوين - تسمح بتعيين المعلمات من خلال التعليقات التوضيحية أو XML أو تكوين جافا.


استخدام حاوية DI يوفر المزايا التالية:

  • تقليل ارتباط الكود - الفئات لا تعرف كيف يتم إنشاء تبعياتها.
  • تبسيط الاختبار - يمكن بسهولة استبدال التبعيات الحقيقية بـ mocks.
  • زيادة قابلية إعادة الاستخدام - تصبح المكونات مستقلة وسهلة الاستبدال.
  • إدارة مركزية للتكوين - جميع الإعدادات في مكان واحد.


Spring IoC (انعكاس التحكم)



Spring Framework هي أشهر حاوية DI في نظام جافا البيئي. حاوية IoC الخاصة به (غالبًا ما تسمى ApplicationContext) تدعم طرق تكوين مختلفة: XML والتعليقات التوضيحية وتكوين جافا. يعتبر Spring IoC الأساس لـ Spring Boot و Spring MVC و Spring Data والعديد من المشاريع الأخرى.



مثال على التكوين عبر فئة جافا:



import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;

@Configurationpublic class AppConfig {

@Bean public UserRepository userRepository() { return new JdbcUserRepository(); }

@Bean public UserService userService(UserRepository userRepository) { return new UserServiceImpl(userRepository); }}


نفس المثال باستخدام التعليقات التوضيحية @Component و @Autowired و @Service:



import org.springframework.stereotype.Service;import org.springframework.beans.factory.annotation.Autowired;

@Servicepublic class UserServiceImpl implements UserService {

private final UserRepository userRepository;

@Autowired public UserServiceImpl(UserRepository userRepository) { this.userRepository = userRepository; }}


مزايا Spring IoC:

  • مجتمع ضخم ووثائق غنية.
  • تكامل عميق مع وحدات Spring الأخرى (AOP, Transactions, Security).
  • دعم نطاقات مختلفة (singleton, prototype, request, session).
  • نظام قوي للأحداث والملفات الشخصية.


توصيات