يعد المكون الإضافي وسيلة لطرف ثالث لتوسيع وظائف التطبيق. يقوم المكون الإضافي بتنفيذ نقاط الامتداد المعلن عنها بواسطة التطبيق أو المكونات الإضافية الأخرى. كما يمكن للمكون الإضافي تحديد نقاط الامتداد.
ملاحظة: بدءًا من الإصدار 0.9، يمكنك تحديد الامتداد مباشرة في جرة التطبيق (لست ملزمًا بوضع الامتداد في مكون إضافي - يمكنك رؤية هذا الامتداد كملحق افتراضي/امتداد للنظام). راجع WhazzupGreeting للحصول على مثال حقيقي.
مع PF4J يمكنك بسهولة تحويل تطبيق جافا المتجانس إلى تطبيق معياري.
PF4J عبارة عن إطار عمل إضافي مفتوح المصدر (ترخيص Apache) وخفيف الوزن (حوالي 100 كيلو بايت ) لجافا، مع الحد الأدنى من التبعيات (فقط slf4j-api) وقابل للتوسيع للغاية (راجع PluginDescriptorFinder
و ExtensionFinder
).
من الناحية العملية، PF4J عبارة عن إطار عمل صغير يهدف إلى إبقاء النواة بسيطة ولكن قابلة للتوسيع. لدينا أيضًا نظام بيئي من الامتدادات يحركه المجتمع. تتوفر الآن هذه الإضافات:
لا XML، جافا فقط.
يمكنك وضع علامة على أي واجهة أو فئة مجردة كنقطة امتداد (مع واجهة علامة ExtensionPoint) وقمت بتحديد أن الفئة هي امتداد مع التعليق التوضيحيExtension.
JarPluginManager
و ZipPluginManager
و DefaultPluginManager
(وهو JarPluginManager
+ ZipPluginManager
) أو يمكنك تنفيذ مدير إضافي مخصص بدءًا من AbstractPluginManager
(تنفيذ أساليب المصنع فقط).ExtensionPoint
).PLUGIN = حاوية لنقاط الامتداد والامتدادات + أساليب دورة الحياة (البدء والإيقاف والحذف)
يشبه المكون الإضافي الوحدة النمطية من الأنظمة الأخرى. إذا لم تكن بحاجة إلى أساليب دورة الحياة (طرق ربط للبدء والإيقاف والحذف)، فلن تكون مجبرًا على توفير فئة مكون إضافي (خاصية PluginClass
من واصف المكون الإضافي اختيارية). ما عليك سوى تقديم بعض الوصف للمكون الإضافي (المعرف، الإصدار، المؤلف، ...) لتتبع جيد (يريد تطبيقك معرفة من قام بتوفير الامتدادات أو نقاط الامتدادات).
من السهل جدًا إضافة pf4j في تطبيقك.
حدد نقطة امتداد في التطبيق/المكون الإضافي الخاص بك باستخدام علامة واجهة ExtensionPoint :
public interface Greeting extends ExtensionPoint {
String getGreeting ();
}
قم بإنشاء ملحق باستخدام التعليق التوضيحي @Extension
:
@ Extension
public class WelcomeGreeting implements Greeting {
public String getGreeting () {
return "Welcome" ;
}
}
أنشئ ( اختياري ) فئة Plugin
إذا كنت مهتمًا بأحداث دورة حياة المكون الإضافي (بدء، إيقاف، ...):
public class WelcomePlugin extends Plugin {
@ Override
public void start () {
System . out . println ( "WelcomePlugin.start()" );
}
@ Override
public void stop () {
System . out . println ( "WelcomePlugin.stop()" );
}
@ Override
public void delete () {
System . out . println ( "WelcomePlugin.delete()" );
}
}
في الكود أعلاه قمنا بإنشاء مكون إضافي (ترحيبي) يأتي مع ملحق واحد لنقطة امتداد Greeting
.
يمكنك توزيع المكون الإضافي الخاص بك كملف jar (الحل البسيط). في هذه الحالة أضف البيانات التعريفية للمكون الإضافي في ملف MANIFEST.MF
الخاص بالجرة:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: decebal
Build-Jdk: 1.6.0_17
Plugin-Class: org.pf4j.demo.welcome.WelcomePlugin
Plugin-Dependencies: x, y, z
Plugin-Id: welcome-plugin
Plugin-Provider: Decebal Suiu
Plugin-Version: 0.0.1
في البيان أعلاه، وصفنا مكونًا إضافيًا بمعرف welcome-plugin
(سمة إلزامية). لقد قمنا أيضًا بتعريف فئة org.pf4j.demo.welcome.WelcomePlugin
(سمة اختيارية)، مع الإصدار 0.0.1
(سمة إلزامية) ومع تبعيات للمكونات الإضافية x, y, z
(سمة اختيارية).
يمكنك الآن اللعب باستخدام المكونات الإضافية والإضافات الموجودة في الكود الخاص بك:
public static void main ( String [] args ) {
...
// create the plugin manager
PluginManager pluginManager = new JarPluginManager (); // or "new ZipPluginManager() / new DefaultPluginManager()"
// start and load all plugins of application
pluginManager . loadPlugins ();
pluginManager . startPlugins ();
// retrieve all extensions for "Greeting" extension point
List < Greeting > greetings = pluginManager . getExtensions ( Greeting . class );
for ( Greeting greeting : greetings ) {
System . out . println ( ">>> " + greeting . getGreeting ());
}
// stop and unload all plugins
pluginManager . stopPlugins ();
pluginManager . unloadPlugins ();
...
}
الإخراج هو:
>>> Welcome
PF4J قابل للتخصيص للغاية ويأتي مع الكثير من الأشياء الجيدة. يرجى قراءة الوثائق لتكتشف بنفسك قوة هذه المكتبة.
الوثائق متاحة على pf4j.org
التطبيقات التجريبية متوفرة في المجلد التجريبي