环境:SpringBoot3.2.5
1. 简介
本篇文章将介绍一款非常优秀的Java框架PF4J。PF4J使你可以轻松地将单体 Java 应用程序转换为模块化应用程序。PF4J 是一个开源(Apache 许可)、轻量级(约 100 KB)的 java 插件框架,依赖性极低(只有 slf4j-api 和 java-semver),可扩展性极强。
实际上,PF4J 是一个微型框架,目的是保持核心简单但可扩展。目前,这些扩展已经可用:
pf4j-update (PF4J 的更新机制)
pf4j-spring (PF4J - Spring 框架集成)
pf4j-web (web应用程序中的PF4J)
pf4j-wicket (基于PF4J的Wicket插件框架)
你可以将任何接口或抽象类标记为扩展点(使用标记接口 ExtensionPoint),并使用 @Extension 注解指定某个类是扩展类。
PF4J核心组件
Plugin:是所有插件类型的基类。每个插件都被加载到一个单独的类加载器中,以避免冲突。
PluginManager:用于插件管理的各个方面(加载、启动、停止)。可以使用 DefaultPluginManager 的内置实现,也可以从 AbstractPluginManager 开始实现自定义插件管理器(仅实现工厂方法)。
PluginLoader:加载插件所需的所有信息(类)。
ExtensionPoint:任何 java 接口或抽象类都可以标记为扩展点(实现 ExtensionPoint 接口)。
Extension:是一个扩展点的实现。它是类上的一个 Java 注解类。
JDK版本要求:当前构建 PF4J 所需的最低 Java 版本应为 9,但运行时 Java 版本可以是 8,因为该工具是一个多版本的 jar。
2. 实战案例
2.1 依赖管理
<dependency>
<groupId>org.pf4j</groupId>
<artifactId>pf4j-spring</artifactId>
<version>${pf4j.version}</version>
</dependency>
只需要引入上面一个依赖即可,自行查看maven仓库最新版本。
2.2 扩展点应用
定义一个接口
public interface AuthenticationProvider extends ExtensionPoint {
String authenticate() ;
}
声明一个接口,该 接口继承了ExtensionPoint,以标记这是一个扩展点。
声明2个上面接口的两个实现
@Extension
public class BasicAuthenticationProvider implements AuthenticationProvider {
@Override
public String authenticate() {
return "Basic Authentication" ;
}
}
@Extension
public class FormAuthenticationProvider implements AuthenticationProvider {
@Override
public String authenticate() {
return "Form Authentication" ;
}
}
这里我并没有使用@Component注解。