pf4j实例 插件框架

实现整个过程需要三个部分,第一就是根接口,第二是插件,第三是应用程序。这是3个java项目。

首先要下载jar包,百度搜索maven repository,然后搜索pf4j,如下图,下载第一个的相应版本就可以,我用的是1.2

然后,创建根节点项目,

package com.wgn.test1;

import ro.fortsoft.pf4j.ExtensionPoint;

/*
 * 根接口,继承ExtensionPoint
 * 将该项目打成jar包,放到plugin项目的lib文件夹下,然后构建配置路径
 */
public interface Testpf4j extends ExtensionPoint {
    public void hello();
}

第三,创建插件项目,并将根接口项目打成jar包,放到插件项目的lib目录下,构建路径

package com.wgn.test2;

import com.wgn.test1.Testpf4j;

import ro.fortsoft.pf4j.Extension;
import ro.fortsoft.pf4j.Plugin;
import ro.fortsoft.pf4j.PluginWrapper;

public class Testpf4jImpl extends Plugin {

    public Testpf4jImpl(PluginWrapper wrapper) {
        super(wrapper);
    }

    @Override
    public void start() {
        System.out.println("----------------------start");
    }

    @Override
    public void stop() {
        System.out.println("----------------------stop");
    }

    /*
     * 必须添加static修饰符
     */
    @Extension
    public static class Testpf4jImpls implements Testpf4j {

        @Override
        public void hello() {
            System.out.println("hello world!");
        }

    }
}

MANIFEST.MF:

Manifest-Version: 1.0
Plugin_Dependencies:
Implementation-Title: Demo Plugin #2
Implementation-Version: 1.2.0
Archiver-Version: Plexus Archiver
Built-By: root
Specification_Title: Demo Plugin #2
Implementation-Vendor-Id: com.wgn.test1.Testpf4j
Plugin-Version: 0.0.1
Plugin-Id: plugin01
Plugin-Provider: Decebal Suiu
Plugin-Class: com.wgn.test2.TestPf4jImpl
Build-dk: 1.8.0_102
Specification-Version; 1.2.0

extensions.idx:

com.wgn.test2.Testpf4jImpl$Testpf4jImpls

最后,新建程序项目,将插件放入plugins目录下,根接口放入lib目录下

package com.wgn.test2;

import com.wgn.test1.Testpf4j;

import ro.fortsoft.pf4j.Extension;
import ro.fortsoft.pf4j.Plugin;
import ro.fortsoft.pf4j.PluginWrapper;

public class Testpf4jImpl extends Plugin {

    public Testpf4jImpl(PluginWrapper wrapper) {
        super(wrapper);
    }

    @Override
    public void start() {
        System.out.println("----------------------start");
    }

    @Override
    public void stop() {
        System.out.println("----------------------stop");
    }

    /*
     * 必须添加static修饰符
     */
    @Extension
    public static class Testpf4jImpls implements Testpf4j {

        @Override
        public void hello() {
            System.out.println("hello world!");
        }

    }
}
时间: 2024-10-31 15:24:20

pf4j实例 插件框架的相关文章

转:自己动手写插件框架(1)

转自:http://www.devbean.net/2012/03/building-your-own-plugin-framework-1/ 本系列文章来自 Building Your Own Plugin Framework,主要内容是讨论使用 C/C++ 语言开发跨平台的插件框架所需要的架构.开发方法以及部署.我们将从分析现有插件/组件系统开始,一步步深入了解如何开发插件框架,以及很多需要注意的问题,比如二进制兼容性等,在文章的最后,我们将给出一个比较合理的解决方案. 在本系列文章中,我们

05、NetCore2.0插件框架运行原理源码初窥

05.NetCore2.0插件框架运行原理之WebHostBuilder源码初窥 NetCore2.0的插件框架是要解决对象创建的问题,把创建对象与使用对象进行解耦.调用者不需要关心对象是单例的还是多实例的:插件的扩展和调用也更容易. 一.我们先看看插件框架是如何使用的 首先使用VS2017新建一个控制台程序,要使用插件框架,我们需要引入微软的依赖注入包: install-package Microsoft.Extensions.DependencyInjection 我们声明一个自己的接口,并

[转]C/C++:构建你自己的插件框架

本文译自Gigi Sayfan在DDJ上的专栏文章.Gigi Sayfan是北加州的一个程序员,email:[email protected] 本文是一系列讨论架构.开发和部署C/C++跨平台插件框架的文章的 第一篇 第一部分探索了一下现状,调查了许多现有的插件/组件库,深入研究了二进制兼容问题,并展现了一些该方案必要的一些属性. 后续的文章用一个例子展示了可用于Window.Linux.Mac OS X并易于移植到其他系统的,具有工业级强度的插件框架.与其他类似框架相比,该框架有一些独一无二的

站在分析的角度去实现插件框架

开场一些题外话,今天登陆这个"小菜"的博客园,感触颇多."小菜"是我以前在QQ群里面的网名,同时也申请了这个博客园账户,五年前的"小菜"在NET和C++某两个群里面非常的活跃,也非常热心的帮助网友尽能力所及解决技术上的问题.依稀记得当时NET群里面的"青菊.Allen.酷酷",C++群里面的"夏老师.风筝兄"等网友.哥们.时过境迁,后来因为某些原因而慢慢淡出了QQ群里的技术交流,在这里我真的非常感谢网友&q

我们一起完成插件框架的设计与实现

原文:我们一起完成插件框架的设计与实现 开场一些题外话,今天登陆这个"小菜"的博客园,感触颇多."小菜"是我以前在QQ群里面的网名,同时也申请了这个博客园账户,五年前的"小菜"在NET和C++某两个群里面非常的活跃,也非常热心的帮助网友尽能力所及解决技术上的问题.依稀记得当时NET群里面的"青菊.Allen.酷酷",C++群里面的"夏老师.风筝兄"等网友.哥们.时过境迁,后来因为某些原因而慢慢淡出了QQ群里

轻量级的C++插件框架 - X3 C++ PluginFramework

X3 C++ PluginFramework 代号为X3的C++轻量级通用插件框架平台是一套通用的C++轻量级插件体系,没有使用MFC.ATL.COM.可在Windows和Linux下编译运行.应用程序可以基于X3插件框架进行快速开发,X3插件框架中的插件既可以单独使用,又可以灵活组合使用.X3插件框架已经过3年十几个系统的实际使用验证. 目前X3插件框架包括插件内核部分(插件基础.插件管理器.Observer管理器插件.日志管理器插件)和实用技术插件(XML读写封装插件.数据库操作封装插件.文

[转]仿World Wind构造自己的C#版插件框架——WW插件机制精简改造

很久没自己写东西啦,早该好好总结一下啦!一个大师说过“一个问题不应该被解决两次!”,除了一个好脑筋,再就是要坚持总结. 最近需要搞个系统的插件式框架,我参照World Wind的插件方式构建了个插件框架,可以参照<WorldWind学习系列五:插件加载过程全解析>,下面与大家分享一下. 初始化时,加载前面两个插件,可以动态加载KeyBoarderLoader,如下图: 该插件框架是WW插件框架的精简改造版,非常适用于插件式系统开发,也希望帮助大家学习一下WW的插件加载机制. 缺陷在于:未实现事

转:自己动手写插件框架(3)

转自:http://www.devbean.net/2012/03/building-your-own-plugin-framework-3/ 编程语言的支持 在前面的章节中,我们已经了解到,如果你能够使用编译器令应用程序和插件的虚表匹配,那么就可以保持 C++ 虚表级别的兼容性:或者你可以使用 C 级别的兼容性,然后就能使用不用的编译器去构建系统,但其限制在于你只能编写纯 C 应用.这样的话,你就不能够使用前面我们在例子 IActor 中看到的那种优雅的 C++ 接口. 纯 C 实现 在纯 C

转:自己动手写插件框架(2)

转自:http://www.devbean.net/2012/03/building-your-own-plugin-framework-2/ 插件编程接口 所谓插件,其实就是基于接口的设计.基于插件的系统最基本的一点就是,要有一个中心系统,用于加载未知的插件,并且能够使用预先定义好的接口和协议与这些插件进行交互. 最基本的方式是定义一个接口,提供一系列插件(动态的或者是静态)需要暴露出的函数.这种实现从技术上说是可行的,但实际并不那么简单地操作.原因在于,一个插件需要支持两类接口,但是却只能暴