同Dubbo的扩展SPI一样,Pf4j这个插件框架也师出同门,都是由JDK自带的SPI(参见Java的SPI简单实例)衍化而来。但Pf4j毕竟是一个插件框架,对插件的支持相对专业一些。官网上的介绍说:PF4J是一个开源(Apache许可证)轻量级(约100kb)的java插件框架,具有最小的依赖性(只有slf4japi和javasemver),并且具有很强的可扩展性。接下来我们还是用一个简单的例子说明:
1、接口类,继承ExtensionPoint:
package com.wlf.service;
import org.pf4j.ExtensionPoint;
public interface IPf4jGreeting extends ExtensionPoint {
void sayHello();
}
2、接口实现类,需要@Extension注解证明它是扩展点的实现。一般都放在jar包或zip包中,但这里我们为了方便,直接放在同一个项目中:
package com.wlf.service.impl;
import com.wlf.service.IPf4jGreeting;
import org.pf4j.Extension;
@Extension
public class IPf4jGreetingImpl1 implements IPf4jGreeting {
@Override
public void sayHello() {
System.out.println("hello, world.");
}
}
package com.wlf.service.impl;
import com.wlf.service.IPf4jGreeting;
import org.pf4j.Extension;
@Extension
public class IPf4jGreetingImpl2 implements IPf4jGreeting {
@Override
public void sayHello() {
System.out.println("hi, mia.");
}
}
3、应用类,执行插件加载和实例化:
package com.wlf.service;
import org.pf4j.DefaultPluginManager;
import org.pf4j.PluginMana