实现整个过程需要三个部分,第一就是根接口,第二是插件,第三是应用程序。这是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!");
} }
}

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

  1. (2)从实际项目谈起,基于MEF的插件框架之总体设计

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.MEF框架简介 MEF的全称是Managed Extensibil ...

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

    本文译自Gigi Sayfan在DDJ上的专栏文章.Gigi Sayfan是北加州的一个程序员,email:gigi@gmail.com. 本文是一系列讨论架构.开发和部署C/C++跨平台插件框架的文 ...

  3. 基于MEF的插件框架之总体设计

    基于MEF的插件框架之总体设计 1.MEF框架简介 MEF的全称是Managed Extensibility Framework(MEF),其是.net4.0的组成部分,在3.5上也可以使用.熟悉ja ...

  4. MapReduce实例&YARN框架

    MapReduce实例&YARN框架 一个wordcount程序 统计一个相当大的数据文件中,每个单词出现的个数. 一.分析map和reduce的工作 map: 切分单词 遍历单词数据输出 r ...

  5. 一个.NET Core下的开源插件框架

    插件模式历史悠久,各种中大型软件基本上都会实现插件机制,以此支持功能扩展,从开发部署层面,插件机制也可实现功能解耦,对于并行开发.项目部署.功能定制等都有比较大的优势. 在.NET Core下,一般我 ...

  6. 分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法

    在这篇文章我分享了如何使用分层与模块化的方法来设计一个分布式服务集群.这个分布式服务集群是基于DynamicProxy.WCF和OSGi.NET插件框架实现的.我将从设计思路.目标和实现三方面来描述. ...

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

    很久没自己写东西啦,早该好好总结一下啦!一个大师说过“一个问题不应该被解决两次!”,除了一个好脑筋,再就是要坚持总结. 最近需要搞个系统的插件式框架,我参照World Wind的插件方式构建了个插件框 ...

  8. 终于可以发布Delphi下收点OSGI精髓皮毛而设计的插件框架WisdomPluginFramework

    这是一个Delphi实现的插件框架,我耗费了相当相当相当多的精力来设计她,虽然仅闪着点我微薄智慧的光芒,但我还是决定用Wisdom来命名她,也因它是我绝无仅有的,在完成1年多后回头来看仍能相当满意的作 ...

  9. 基于Proxy思想的Android插件框架

    意义 研究插件框架的意义在于下面几点: 减小安装包的体积,通过网络选择性地进行插件下发 模块化升级.减小网络流量 静默升级,用户无感知情况下进行升级 解决低版本号机型方法数超限导致无法安装的问题 代码 ...

随机推荐

  1. leetcode Single Number II - 位运算处理数组中的数

    题目描述: 给定一个包含n个整数的数组,除了一个数出现一次外所有的整数均出现三次,找出这个只出现一次的整数. 题目来源: http://oj.leetcode.com/problems/single- ...

  2. python正则以及collections模块

    正则 一.认识模块  什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是加上.py的后缀,但其实import加载的模块分为四个通用类别 : 1.使用python编写的代码(.p ...

  3. myeclipse 10破解

    因为笔者的电脑是刚买不久,忘记先给电脑分区,等软年安装差不多了才发现忘记分区,所以就备份了数据,然后分区,结果分区过程中没有异常发生,就没用备用数据,就用分过区的原数据,当时还以为没问题,结果打开my ...

  4. springJunit测试

    ; m.setModelType(s); m.setModelUrlType(s); modelService.create(m); } }   来源: http://enki-ding-yeah-n ...

  5. 获取字符串长度函数length()和hengthb()

    oracle获取字符串长度函数length()和hengthb() lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算stri ...

  6. [Python Study Notes]七彩散点图绘制

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  7. python爬虫(2)--Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 拆分这些请求,我们只 ...

  8. Anaconda 安装教程(Win10环境) Tensorflow安装

    序 Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候.为了解决这些问题,有不少发行版的Python,比如WinPython.An ...

  9. Android ListView 设置

    android:minHeight="80dip"//设置每一条的高度 android:divider="@null" //设置默认的分割线不显示 androi ...

  10. 【总结整理】dojo学习

    Dojo Toolkit 的特性可以分到 4 个不同部分.这种划分使得开发人员可以将库大小保持到最小,确保应用程序性能不受大量 JavaScript 库下载的影响.例如,如果您只需要 Ajax 支持性 ...