强大!SpringBoot通过插件,动态扩展系统功能

文摘   2024-10-28 19:00   新疆  

环境: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个上面接口的两个实现

@Extensionpublic class BasicAuthenticationProvider implements AuthenticationProvider {
@Override public String authenticate() { return "Basic Authentication" ;  }}@Extensionpublic class FormAuthenticationProvider implements AuthenticationProvider {
@Override public String authenticate() { return "Form Authentication" ; }}

这里我并没有使用@Component注解。

Spring全家桶实战案例源码
spring, springboot, springcloud 案例开发详解
 最新文章