البرمجة

Injecting Spring Dependencies in MapStruct Mappers

في عالم تطوير البرمجيات، MapStruct هي إطار عمل متقدم لمساعدتك في تخطيط بياناتك بين مختلف الطبقات في تطبيقك بسهولة وكفاءة. يعتمد MapStruct على توليد الشفرة المصدرية لإنشاء مجموعة من المابرز (Mappers)، وهي فئات تستخدم لتحويل كائنات من نوع واحد إلى آخر.

عندما تحتاج إلى حقن (Injection) تبعيات (Dependencies) في فئة المابر المولدة (Generated Mapper class) في MapStruct، يجب أن تأخذ في الاعتبار أن الفئات المولدة تعتبر منطقًا خالصًا لتحويل البيانات، ولا يُنصح عمومًا بإضافة منطق الخدمة الخارجية في هذه الفئات.

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

  1. تعريف خدمة Spring:
    قم بتعريف الخدمة التي ترغب في حقنها داخل فئة المابر كمكون Spring. على سبيل المثال، فلنفترض لدينا خدمة تسمى “MyService” كما هو موضح في الاستعلام الخاص بك.

  2. تعريف المابر:
    قم بتعريف المابر الخاص بك مع استخدام MapStruct كالمعتاد. تأكد من تعريف أسلوب يحتاج إلى كائن “MyService”.

  3. تكوين مكون حقن:
    ضع بعين الاعتبار أنك ستحتاج إلى تكوين Spring لحقن الخدمة داخل المابر. يمكنك القيام بذلك باستخدام التهيئة XML أو التهيئة بواسطة التعليمات البرمجية (Java Config)، اعتمادًا على كيفية تكوين تطبيقك.

  4. حقن الخدمة:
    عند بناء المابر، قم بتمرير خدمة “MyService” كمعامل. يمكنك فعل ذلك عن طريق إنشاء مابر واجهة بناء معدلة (Builder) أو استخدام طرق متقدمة لحقن الحسابات.

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

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

المزيد من المعلومات

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

أولاً وقبل كل شيء، يجب علينا فهم كيف يعمل MapStruct. هو إطار عمل يولد كود المابرات (Mappers) بناءً على واجهات Java مع أنوتوش الخرائط (Annotations) تحدد عمليات التعيين بين أنواع البيانات. على سبيل المثال:

java
@Mapper public interface MyMapper { @Mapping(target = "name", source = "fullName") PersonDTO personToPersonDTO(Person person); }

هذا سيولد مابراً يحول كائنات من نوع Person إلى PersonDTO استنادًا إلى محددات الخريطة.

الآن، لحقن التبعيات Spring، يمكننا اتباع الخطوات التالية:

  1. تعريف الخدمة:
    يجب أولاً على الخدمة التي نريد حقنها أن تكون مكون Spring. يمكن تحقيق ذلك بواسطة تعليمات @Service أو @Component على الفئة.

    java
    @Service public class MyService { public String findById(Long id) { // implement your logic here } }
  2. تكوين Spring:
    نحتاج الآن إلى تكوين Spring ليعرف كيفية حقن هذه الخدمة. يمكن أن يتم ذلك عبر الإعلان عن الخدمة في ملف تكوين التطبيق (application context)، سواء XML أو JavaConfig.

    java
    @Configuration public class AppConfig { @Bean public MyService myService() { return new MyService(); } }
  3. حقن الخدمة في المابر:
    الآن، يمكننا حقن الخدمة في المابر بعد تحديد واجهة المابر. يمكن استخدام حقن الإعلانات @Autowired أو استخدام الإعلان عن البناء لإعطاء قيمة للمعامل.

    java
    @Mapper(componentModel = "spring", uses = MyService.class) public interface MyMapper { @Mapping(target = "x", expression = "java(myService.findById(id))") TargetDTO sourceToTarget(Source source); MyService myService = null; // This field will be injected by Spring }

    في هذا المثال، تم استخدام componentModel = "spring" للإشارة إلى أن MapStruct يجب أن يستخدم Spring لحقن التبعيات.

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

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر