1. مقدمة
في ظل الظروف العادية ، لا يمكن لـ ClassLoader سوى العثور على ملف *.class في الدليل الحالي أو فئة الملفات في الجرة. من أجل تحميل الموارد في الجرة المتداخلة ، يتم تعبئة ملف الفصل في الجرة المتداخلة وملف الفئة من التطبيق في جرة ، بحيث لا توجد جرة متداخلة. ومع ذلك ، عند القيام بذلك ، لا يمكنك معرفة ما يعتمد عليه التطبيق وأيها التطبيق نفسه. بالإضافة إلى ذلك ، قد يكون محتوى الفئة في الجرار المتعددة مختلفًا ولكن أسماء الملفات هي نفسها. وُلد ربيع الحمل في Springboot لحل هذه المشكلة بأمان.
تتيح لنا وحدة تحميل الربيع-boot استخدام Archive.jar java -jar لتشغيل ملفات جرة أو حرب تحتوي على تبعيات متداخلة. يوفر ثلاثة أنواع من القاذفات (Jarlauncher و WarLauncher و PropertiesLauncher). الغرض من قاذفات الفصول هذه هو أن تكون قادرًا على تحميل الموارد المتداخلة في الجرة (مثل ملفات الفصول الدراسية ، وملفات التكوين ، وما إلى ذلك). [جرة | الحرب] يبحث قاذفة بشكل ثابت عن الموارد في ملفات جرة متداخلة في دليل lib للجرة الحالية.
2. بنية دليل الجرة التي توفرها وحدة تحميل الربيع
تم إصلاح تنسيق ملف JAR في Springboot على النحو التالي:
أرشيف +-META-INF (1) | +-Manifest.mf +-org (2) | +-Springframework | +-boot | +-loader | +-<فئات لوادر التمهيد الربيع> +-com (3) | +-ميكومباني | + مشروع | +-youicclasses.class +-lib (4) +-Pendency1.jar +-dependency2.jar
فكيف يتم تحميل موارد تحميل الربيع وفقًا لهذا الهيكل؟
الفئة الرئيسية: org.springframework.boot.loader.jarlauncher فئة بدء: com.mycompany.project.myapplication
ونسخ ملف الفئة في حزمة Spring-Boot-Loader إلى الهيكل (2) ، انسخ اعتماد التطبيق إلى (4) انسخ فئة التطبيق إلى (3)
3. تحليل عملية التغليف المكوّنات في الربيع-بوت مافن-بلوجين
ملاحظة: هنا نحتاج أن نفكر في سبب حاجة إلى نسخ الفصل إلى الهيكل (2) الذي كان ينبغي وضعه في محمل الربيع.
4. تحليل عملية تنفيذ Jarlauncher
بعد قراءة هذه العملية ، سنقوم بتحليل المشكلات المتبقية في القسم الثالث. على سبيل المثال ، يستخدم المخطط المنعطف أولاً AppClassLoader لتحميل فئة Jarlauncher وإنشاء فئة LaunchedUrlClassloader. ينتمي LaunchedUrlClassloader إلى حزمة spring-boot-boot-loader.jar ، و appclassloader هو محمل عادي لا يمكنه تحميل الملفات في الجرة المتداخلة. لذلك ، إذا تم وضع spring-boot-loader.jar في دليل LIB ، فلن يجد AppClassloader جهاز التشغيل LaunchedUrlClassloader. لذلك عند التعبئة
انسخ الفصل إلى الهيكل (2) الذي كان ينبغي وضعه في ربيع الحمل. jar في lib.
5. ملخص
تنفذ وحدة تحميل الربيع بوتس بأناقة تحميل موارد الجرة المتداخلة من خلال بنية حزمة جرة مخصصة. من خلال إعادة تعيين فئة بدء التشغيل وهيكل جرة التنظيم أثناء التغليف ، ووضع محمل مخصص في وقت التشغيل لتحقيق موارد جرة متداخلة.