插件体系架构
[TOC]
<?xml version="1.0" encoding="utf-8"?>
<plugin>
<group>fit.hakuna</group>
<name>http-server</name>
<version>1.0.0</version>
</plugin>FIT体系结构中使用的ClassLoader主要有三个:
SharedClassLoader,用以加载公共JAR包,如FIT对外API、Genericable及结构体定义等。FrameworkClassLoader,用以加载FIT框架实现及所使用的JAR包。PluginClassLoader,用以加载一个插件的实现及所使用的JAR包。
其中SharedClassLoader的parent为启动FIT运行时环境的ClassLoader,FrameworkClassLoader和PluginClassLoader的parent为SharedClassLoader。
ClassLoader隔离的目的
- JAR隔离,不同插件使用的三方包互不影响,避免插件间的兼容性问题。
- Bean隔离,不同插件的Bean从各自的
ClassLoader中扫描,在ClassLoader层面对扫描范围进行隔离。
- plugin-root
- lib
- third-party
- shared
- genericables
- structures
存储插件编译的JAR包,目录及子目录中的所有JAR将被加载到PluginClassLoader。
存储插件所使用的三方包,目录及子目录中的所有JAR将被加载到PluginClassLoader。
存储公共JAR,目录及子目录中的所有JAR将被加载到SharedClassLoader。
存储插件使用或实现的Genericable的JAR包。
存储插件使用或实现的Genericable中使用的结构体的JAR包。
<?xml version="1.0" encoding="utf-8"?>
<plugin name="my-plugin">
<category>user</category>
<level>5</level>
</plugin>