سؤال

زميل أشار لي في اليوم الآخر BCEL الذي يمكن أن أقول أنها أفضل من تفسير و قراءة سريعة, طريقة تعديل في وقت التشغيل رمز بايت.كانت فكرتي الأولى أن بدا خطير و الفكرة الثانية هي أنه بدا رائعا.ثم أعطى بعض مزيد من التفكير و تذكرت codinghorror آخر على القرد-الترقيع وأدركت أن هذا هو أساسا نفس الشيء.وقد أي شخص من أي وقت مضى تستخدم BCEL عن أي شيء عملي ؟ أنا صحيح أن هذا هو الأساس تشغيل الوقت القرد الترقيع ، أو أنا في عداد المفقودين شيئا ؟

هل كانت مفيدة؟

المحلول

انها أكثر قليلا من مستوى منخفض من الكلاسيكية القرد الترقيع و من ما قرأت, الطبقات تحميلها بالفعل في VM لا يتم تحديث ترجمات.إلا أنها تدعم حفظه إلى الدرجة الملفات مرة أخرى, لا تعديل وقت التشغيل الطبقات.

نصائح أخرى

من BCEL التعليمات:

Q:يمكن إنشاء أو تعديل فصول بشكل حيوي مع BCEL?

A:BCEL يحتوي على دروس مفيدة في util حزمة ، وهي ClassLoader ، JavaWrapper.نلقي نظرة على ProxyCreator سبيل المثال.

ولكن monkeypatching هو...أوم...للجدل, وربما كنت لا ينبغي أن تستخدم إذا كانت لغتك لا يعتمد عليه.

إذا كان لديك حالة الاستخدام الجيد لذلك ، قد أقترح embbededing Jython?

قد ننظر إليه على أنه قرد الترقيع.انا افضل عدم استخدامها (ربما أنا لم تواجه للاستفادة من ذلك؟) ، ولكن تكون على دراية به (أن يكون لديك فكرة كيف الربيع Hibenrate استخدامه ولماذا).

ترى هذا realworld سبيل المثال: Jawk مترجم وحدة.BCEL مفيد "تجميع" اور مخصص اللغة.

BCEL لا يدعم القرد الترقيع ، هو فقط يتلاعب مع بايت كود وربما الكثير في العرف classloader.ومع ذلك كنت يمكن تنفيذ monkeypatching على JVM باستخدام مكتبة مثل BCEL جافا الوكيل.جافا الوكيل (تحميل -javaagent الحجة) يمكن الوصول إلى الأجهزة API وتعديل تحميل الطبقات.فإنه ليس من الصعب تنفيذ ذلك عن طريق بعض الجسور.

ولكن تذكر:

  • أنا لست متأكدا مما إذا كان الاضطرار إلى استخدام javaagent هو ما تريد.
  • في أي لغة ، قرد الترقيع يمكن أن يؤدي سوء سلوك يمكن التنبؤ به.
  • يمكنك تعديل طريقة.في نظرية, يمكنك أيضا إضافة بعض طريقة ولكن تحتاج إلى ترجمة المشروع ضد تعديل (مصححة) الطبقات.وأعتقد أن هذا من شأنه أن يسبب الكثير من الألم و هو لا يستحق ذلك.هناك بديل اللغات التي تدعم ذلك (مثلا ، رائع) أو suppport شيء مماثل (مثلا ، ضمني التحويلات في سكالا).
  • فمن الأفضل أن تصميم API الخاص بك من استخدام القرد الترقيع.قد تكون مفيدة بدلا عن طرف ثالث المكتبات.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top