ปลั๊กอินเป็นวิธีหนึ่งสำหรับบุคคลที่สามในการขยายฟังก์ชันการทำงานของแอปพลิเคชัน ปลั๊กอินใช้จุดส่วนขยายที่ประกาศโดยแอปพลิเคชันหรือปลั๊กอินอื่นๆ นอกจากนี้ปลั๊กอินยังสามารถกำหนดจุดขยายได้
หมายเหตุ: ตั้งแต่เวอร์ชัน 0.9 เป็นต้นไป คุณสามารถกำหนดส่วนขยายได้โดยตรงใน Application Jar (คุณไม่จำเป็นต้องใส่ส่วนขยายในปลั๊กอิน - คุณสามารถเห็นส่วนขยายนี้เป็นส่วนขยายเริ่มต้น/ระบบ) ดู WhazzupGreeting สำหรับตัวอย่างจริง
ด้วย PF4J คุณสามารถแปลงแอปพลิเคชัน Java แบบเสาหินในแอปพลิเคชันแบบแยกส่วนได้อย่างง่ายดาย
PF4J เป็นเฟรมเวิร์กปลั๊กอินโอเพ่นซอร์ส (ใบอนุญาต Apache) น้ำหนักเบา (ประมาณ 100 KB ) สำหรับ java โดยมีการพึ่งพาน้อยที่สุด (เฉพาะ slf4j-api) และขยายได้มาก (ดู PluginDescriptorFinder
และ ExtensionFinder
)
ในทางปฏิบัติ PF4J เป็นไมโครเฟรมเวิร์กที่มีจุดมุ่งหมายเพื่อให้แกนกลางเรียบง่ายแต่สามารถขยายได้ นอกจากนี้เรายังมีระบบนิเวศของส่วนขยายที่ขับเคลื่อนโดยชุมชนอีกด้วย ขณะนี้มีส่วนขยายเหล่านี้แล้ว:
ไม่มี XML มีเพียง Java เท่านั้น
คุณสามารถทำเครื่องหมายอินเทอร์เฟซหรือคลาสนามธรรมเป็นจุดขยายได้ (ด้วย ExtensionPoint ของอินเทอร์เฟซมาร์กเกอร์) และคุณระบุว่าคลาสนั้นเป็นส่วนขยายที่มีคำอธิบายประกอบ @Extension
JarPluginManager
, ZipPluginManager
, DefaultPluginManager
(เป็น JarPluginManager
+ ZipPluginManager
) หรือคุณสามารถใช้ตัวจัดการปลั๊กอินแบบกำหนดเองที่เริ่มต้นจาก AbstractPluginManager
(ใช้วิธีจากโรงงานเท่านั้น)ExtensionPoint
)PLUGIN = คอนเทนเนอร์สำหรับ EXTENSION POINTS และ EXTENSIONS + วิธีการวงจรชีวิต (เริ่ม หยุด ลบ)
PLUGIN จะคล้ายกับ MODULE จากระบบอื่น หากคุณไม่ต้องการเมธอดวงจรการใช้งาน (เมธอด hook สำหรับการเริ่มต้น หยุด ลบ) คุณจะไม่ถูกบังคับให้ระบุคลาสปลั๊กอิน (คุณสมบัติ PluginClass
จากตัวอธิบายปลั๊กอินเป็นทางเลือก) คุณเพียงแค่ต้องระบุคำอธิบายบางส่วนของปลั๊กอิน (id, เวอร์ชัน, ผู้เขียน, ...) เพื่อการติดตามที่ดี (แอปพลิเคชันของคุณต้องการทราบว่าใครเป็นผู้จัดหาส่วนขยายหรือจุดส่วนขยาย)
มันง่ายมากที่จะเพิ่ม pf4j ในแอปพลิเคชันของคุณ
กำหนดจุดส่วนขยายในแอปพลิเคชัน/ปลั๊กอินของคุณโดยใช้เครื่องหมายอินเทอร์เฟซ ExtensionPoint :
public interface Greeting extends ExtensionPoint {
String getGreeting ();
}
สร้างส่วนขยายโดยใช้คำอธิบายประกอบ @Extension
:
@ Extension
public class WelcomeGreeting implements Greeting {
public String getGreeting () {
return "Welcome" ;
}
}
สร้าง (เป็น ทางเลือก ) คลาส Plugin
หากคุณสนใจเหตุการณ์วงจรชีวิตของปลั๊กอิน (start, stop, ...):
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
ของ jar:
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
แอปพลิเคชันสาธิตมีอยู่ในโฟลเดอร์สาธิต