当前位置: 首页 > news >正文

国内服务器做彩票网站安全吗yandex搜索入口

国内服务器做彩票网站安全吗,yandex搜索入口,购物网站建设优缺点,郑州十大网站建设公司PF4J:Plugin Framework for Java 目录 是什么? 不是什么? 特点 组件 主要类 流程概述 spring-pf4j 思考 功能模块化 我对pf4j的封装和使用demo GitHub - chlInGithub/pf4jDemo: pf4j demo 是什么? 开源轻量级的插件框架。通过插件…

PF4J:Plugin Framework for Java

目录

是什么?

不是什么?

特点

组件

主要类

流程概述

spring-pf4j

思考

功能模块化


我对pf4j的封装和使用demo

GitHub - chlInGithub/pf4jDemo: pf4j demo 

是什么?

开源轻量级的插件框架。通过插件形式对系统功能进行个性化扩展。插件需要实现扩展点,扩展点由系统进行定义。

不是什么?

功能模块化加载框架。虽然介绍中描述pf4j可以将庞大的系统转化为模块系统,但依据我的实践来看,仅仅依赖pf4j只能动态加载扩展,无法动态加载完整的功能模块。

特点

  • 开源轻量级的插件框架
  • 简单的标记扩展点,使用interface ExtensionPoint即可将接口和抽象类定义为扩展点
  • 简单的标记扩展,使用@Extension即可定义一个扩展

组件

插件  等同于 由 扩展点、扩展、生命周期行为 构成的一个集合。 

Plugin所有插件的基类。每一个插件均由单独的classloader进行加载,避免冲突。
PluginManager对插件进行切面化管理,如loading, starting, stopping。已提供3中实现,JarPluginManager, ZipPluginManager, DefaultPluginManager(jar_zip)。也可自行实现个性化pluginManager,需要实现AbstractPluginManager。
PluginLoader加载插件需要的所有信息,如class
ExtensionPoint扩展点
Extension扩展,即扩展点的实现

主要类 

PluginManagerpf4j通过PluginManager向外提供plugin管理能力,如生命周期控制、获取扩展实例
PluginWrapperplugin的包装类
ManifestPluginDescriptorFinder从(支持jar\zip\目录)manifest文件读取插件信息,如Plugin-Id(用于避免重复load)、Plugin-Version、Plugin-Class
PluginLoader

用于load plugin需要的所有信息,每个pluginPath对应一个pluginLoader,为每个plugin提供独立的classloader。

如JarPluginLoader

PluginClassLoader自定义的classLoader,修改了loadClass的逻辑。每个plugin对应一个PluginClassLoader实例
PluginState插件生命周期期间的各种状态
DependencyResolver插件间依赖关系分解器。一系列插件之间构建依赖图,唯一入口resolve可以返回依赖分解结果,如插件之间是否存在循环依赖、能否找到依赖的插件、插件依赖版本是否正确等。
LegacyExtensionFinder读取plugin包中META-INF/extensions.idx文件,获取扩展信息和实例。

生命周期概述

加载插件过程MF文件中插件描述-->插件独立classLoader-->插件间依赖解析-->插件已解析状态
开始插件过程加载Plugin实现并生成实例-->调用Plugin.start()-->插件已开始状态
获取某个扩展点实现类的实例
停止插件插件状态变为停止
卸载插件从集合中清除,关闭classLoader

spring-pf4j

将扩展注册为spring ioc bean

思考

如何支持租户场景

pf4j非线程安全,允许不同租户维护各自插件的场景,需要在pf4j基础上再包裹一层,一方面增加线程安全,一方面维护租户与插件、扩展的关系。

需要以一种路径规范存放插件jar,如下图:

如何支持插件依赖的jar

  • 方式1:系统列举出支持的jar集合,插件依赖其中的jar。在demo中已体现该场景,插件正常运行。

如图为插件的pom依赖,插件jar中不包含依赖的任何jars。

插件jar放到上图的租户路径下,在系统中运行Pf4jTest.main,插件扩展运行正常。因为系统的classpath中包含common-lang jar,所以classloader可以找到common-lang中class。

扩展运行结果如下,可以清晰看出,两个插件的classloader是独立的。

  • 方式2:插件jar内部包含依赖的jars
    • 方式2.1:jdk的classloader不支持嵌套jar,需参考spring LaunchedURLClassLoader或JarClassLoader(http://www.jdotsoft.com/JarClassLoader.php)。在不改变pf4j源码情况下,无法实现该方案,因为pf4j使用URLClassLoader。
    • 方式2.2:解压插件jar-->pf4j加载插件jar-->修改生成的classloader的扫描范围,添加依赖jars路径-->启动插件jar
  • 方式3:系统根据插件jar的(maven)依赖去下载依赖的jar

功能模块化

基本能力:系统功能进行模块划分,模块可动态加载和卸载,模块独立且隔离,模块间资源不产生冲突。
设计思路:独立的classloader(修改加载class的顺序,自有范围-->双亲委派)、springcontext、生命周期管理
 

http://www.khdw.cn/news/11669.html

相关文章:

  • 网站做app佛山市seo推广联系方式
  • 同德县wap网站建设公司成都关键词seo推广电话
  • 红色页面网站关键词异地排名查询
  • 网站安全监测可以搜索国外网站的搜索引擎
  • 长春市建设信息网站廊坊关键词优化报价
  • 做视频网站公司要怎么做的泰州seo公司
  • 如何制作门户网站发稿媒体平台
  • 长沙做网站费用如何推广自己的产品
  • 新闻网站建设上海今天发生的重大新闻
  • 一个网站如何做外链地推app接任务平台
  • 单页面网站制作做网站推广的公司
  • 免费做网站视频app开发
  • 淘宝上做的网站 域名到期可以自己续费吗最近一两天的新闻有哪些
  • 如何用模板做网站视频软文一般发布在哪些平台
  • 做淘宝客建网站用什么论坛外链代发
  • 免费素材库短视频素材网站企业官网网站
  • 国外网站怎样建设宁波seo咨询
  • 商城小程序费用标准谷歌优化的最佳方案
  • 公司网站建设分录权重查询爱站网
  • 商务网站创建设计方案搜狗seo软件
  • 一个简易网站怎么做百度收录最新方法
  • 怎么做二维码进网站seo软件定制
  • 电子商务专业网站宁波网站推广方式
  • 南通做网站优化百度广告怎么做
  • 网站页面设计需求营销外包公司
  • 软件外包公司人数什么公司适合做seo优化
  • seo关键词排名工具优化精灵
  • 网站建设软件哪个好sem竞价推广代运营收费
  • 怎样学做网站运营企业推广公司
  • 做网站要空间还是服务器永久免费国外域名注册