محمل فئة مخصصة في Constructor.newInstance
-
22-07-2019 - |
سؤال
وأنا باستخدام وحيد القرن من خلال إطار البرمجة الفول إلى إنشاء وتكوين الكائنات في عملية جافا بلدي. بعض الطبقات المستخدمة في النصوص تحتاج إلى تحميلها بشكل حيوي كما أنها لن تكون دائما على CLASSPATH القياسية.
لتحميل هذه الفئات I تهيئة مصنع سياق إطار البرمجة مع محمل فئة مخصصة الذي يقوم بتحميل هذه الفئات من دليل auxilary. هذا يعمل بشكل جيد.
والمشكلة هي أن بعض هذه الفئات، في المنشئات، واستخدام classs الأخرى التي يجب أن يتم تحميلها من هذا الدليل auxilary. وعند النظر إلى مصدر أرى أن محرك جافا سكريبت ببساطة تدعو Constructor.newInstance.
وكيف لي أن أعرف أي classloader الاستخدامات دعوة newInstance، ويمكنني أن حقن بلدي حتى أتمكن من تحميل الفئات التي محمل الدرجة القياسية لا يعرف كيفية تحميل يدويا.
المحلول
وحاول إعداد classloader الأم محمل صفك لclassloader التطبيق.
ClassLoader myLoader = new ClassLoader(getClass().getClassLoader()) {
... your code loading from custom directory ...
}
والطبقات تحميلها من محمل الخاص بك وسوف تستخدم محمل الخاص لبحث الطبقات الأخرى، لذلك تحتاج محمل الخاصة بك لتوفير تلك (عن طريق تفويض إلى الأصل)
نصائح أخرى
وConstructor.newInstance
تعمل على مثيل Constructor
، الذي ينتمي إلى مثيل Class
معين التي تم تحميلها من قبل ClassLoader
وجه الخصوص. الطبقات تصل من خلال محمل الطبقية الخاصة.
وحيد ARG Class.forName
يستخدم محمل فئة المتصل الفوري ل(وهو API مطيع جدا).