الانعكاس والتهيئة
التعامل مع الميزات الديناميكية
الانعكاس والتهيئة درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.
الانعكاس والإعدادات
لا يستطيع تحليل العالم المغلق في native-image رؤية سوى الشيفرة التي يمكنه تتبعها بشكل ساكن. أما الميزات الديناميكية — مثل الانعكاس والوكلاء والموارد والتسلسل — فتحجب أهدافها عن المحلل. يشرح هذا الدرس كيفية تشغيل هذه الميزات في ملف ثنائي أصلي.
مشكلة الانعكاس
عندما تبحث عن صنف باستخدام اسمه المأخوذ من سلسلة نصية، لا يستطيع المحلل معرفة الصنف المقصود. وإذا كان ذلك الصنف غير قابل للوصول إليه بوسيلة أخرى، فسيُستبعد من الصورة ويفشل البحث أثناء التشغيل.
public class Main {
public static void main(String[] args) throws Exception {
String name = "java.util.ArrayList"; // could come from config
Class<?> c = Class.forName(name);
System.out.println("Loaded: " + c.getSimpleName());
}
}البيانات الوصفية لإمكانية الوصول
الحل هو البيانات الوصفية لإمكانية الوصول: ملفات JSON تُخبر native-image بالأصناف والدوال والحقول التي يتم الوصول إليها ديناميكيًا. وعندها يُبقيها البناء ويسجل أعضاءها.
reflect-config.json
يسمي إدخال الانعكاس الصنف ويحدد الأعضاء المطلوب الاحتفاظ بهم. هذا المقطع بصيغة JSON وليس Java؛ ويوضع ضمن META-INF/native-image/.
[
{
"name": "com.example.Person",
"allDeclaredConstructors": true,
"allDeclaredMethods": true,
"fields": [ { "name": "age" } ]
}
]وكيل التتبع
تُعد كتابة البيانات الوصفية يدويًا أمرًا شاقًا. شغّل تطبيقك على JVM باستخدام وكيل التتبع (-agentlib:native-image-agent=config-output-dir=...). فهو يسجل كل وصول ديناميكي أثناء تشغيل حقيقي، ويُصدر ملفات الإعداد تلقائيًا.
اختبر مسارات شيفرتك
لا يسجل الوكيل إلا ما يُنفَّذ فعليًا، لذلك يجب أن تمرّر التطبيق عبر جميع ميزاته — شغّل اختباراتك باستخدامه. فأي مسار انعكاسي تفوّته سيغيب عن البيانات الوصفية، وسيتسبب في فشل البناء الأصلي.
الوكلاء الديناميكيون
تحتاج الوكلاء الديناميكيون في JDK إلى ملف proxy-config.json يسرد مجموعات الواجهات التي ستُنشأ لها وكلاء. ولا يستطيع المحلل استنتاج هذه المجموعات، لأن قائمة الواجهات تُنشأ أثناء التشغيل.
الموارد
لا تُضمّن الملفات المحمّلة عبر getResourceAsStream تلقائيًا. ويخبر ملف resource-config.json الذي يحتوي على أنماط glob native-image بالموارد التي يجب تجميعها داخل الملف التنفيذي.
public class Main {
public static void main(String[] args) {
var url = Main.class.getResource("/banner.txt");
System.out.println("Resource present: " + (url != null));
}
}التسلسل وJNI
يُعد كل من تسلسل Java والاستدعاءات الأصلية (JNI) ديناميكيًا أيضًا. ولكل منهما ملف إعداد خاص به (serialization-config.json وjni-config.json). وينشئ وكيل التتبع هذين الملفين أيضًا عند تنفيذ تلك المسارات.
التسجيل برمجيًا
يمكن لمؤلفي المكتبات تسجيل البيانات الوصفية في الشيفرة باستخدام Feature عبر واجهة RuntimeReflection، التي تُنفذ في وقت البناء. ويؤدي ذلك إلى تضمين الإعداد الصحيح داخل المكتبة، بحيث لا يحتاج المستخدمون إلى إعداد يدوي.
مستودع البيانات الوصفية المشترك
تحافظ GraalVM على مستودع مشترك للبيانات الوصفية لإمكانية الوصول، يضم إعدادات مُنشأة مسبقًا للمكتبات الشائعة. ويمكن لأدوات البناء الأصلية جلبها تلقائيًا، فتعمل أطر العمل الشائعة مباشرةً دون إعداد إضافي.
تحقّق سريعًا
اختبر مدى فهمك للميزات الديناميكية في الصورة الأصلية.
مراجعة
تعلّمت كيفية التعامل مع الميزات الديناميكية:
- لا تظهر ميزات الانعكاس والوكلاء والموارد والتسلسل وJNI في التحليل الساكن.
- تصرّح ملفات JSON الخاصة بـ البيانات الوصفية لإمكانية الوصول بهذه الميزات لـ native-image.
- ينشئ وكيل التتبع الإعدادات تلقائيًا من تشغيل حقيقي على JVM.
- اختبر جميع مسارات الشيفرة، ولا سيما الاختبارات، حتى لا يفوتك شيء.
- استخدم مستودع البيانات الوصفية المشترك للمكتبات الشائعة.
الأسئلة الشائعة
هل درس «الانعكاس والتهيئة» مجاني؟
نعم — نص درس «الانعكاس والتهيئة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.
ماذا ستتعلم في «الانعكاس والتهيئة»؟
التعامل مع الميزات الديناميكية تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «الانعكاس والتهيئة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما GraalVM
- إنشاء صورة أصلية
- الانعكاس والتهيئة
- مقايضات الصورة الأصلية