pf4j spring 扩展原理简单说明

pf4j spring 扩展是一个很不错的spring 集成扩展,可以方便我们将pf4j集成到spring 应用中

主要使用的技术

动态bean注册,核心代码并不难,目前来说实现比较简单,而且不是很强大

几个核心类

  • ExtensionsInjector 
    主要方便注入SpringPluginManager之后将extension 暴露为spring bean
  • SpringPluginManager 
    进行插件加载以及扩展暴露为spring bean
  • SpringExtensionFactory 
    扩展创建,这里有一点问题就是关于ApplicationContext 对于SpringPluginManager 的实际上与入口是共享的,所有依赖也就共享了 
    对于SpringPlugin 的问题就是自己独立的ApplicationContext,这样spring bean 就不能共享了,也就不能直接注入了
  • SpringPlugin 
    基于自Plugin的Spring 插件标记,同时进行插件自己ApplicationContext的处理

几个问题

Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/pf4j/PluginClassLoader) previously initiated loading for a different type with name "org/springframework/context/ApplicationContext"

这个是常见的是插件包包含了spring ,但是因为插件类加载的问题,造成类异常,可选的方式是自定义classloader进行spring 特殊处理,或者自己在打包的时候排除相关包

说明

目前pf4j spring 扩展设计有点太简单,而且还是有些问题的,后边可以自己扩展下

参考资料

https://github.com/pf4j/pf4j-spring
https://github.com/pf4j/pf4j/issues/93

posted on 2022-02-17 23:38  荣锋亮  阅读(723)  评论(0编辑  收藏  举报

导航