• jspf插件框架


    简介:

    jspf (Java Simple Plugin Framework) 是一个插件框架,用于减少小型项目的的开发时间,增加代码的可维护性。他完全隐藏了组件的详细实现,只用到他们的接口。加载组件所需要的代码也很少,便于编写。

     

    jspf框架完全基于java注释实现

    @PluginImplementation,@InjectPlugin,@PluginLoaded,@Timer

    和@Thread等.

    (关于java注释:元数据从metadata一词译来,就是“关于数据的数据”的意思。越来越的开源框架都提供了“元数据”支持,其实也就是注释支持。Annotation是从java5开始在语言级别提供的一项新特性,Annotation提供了一条与程

    序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看,annotation就像修饰符一样被使用,并应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。这些信息被存储在annotation的“name=value”结构对中。annotation类型是一种接口,能够通过java反射API的方式提供对其信息的访问。)

     

    支持:从JAR文件加载插件,从一个目录加载多个插件,自动加载classpath中所有的插件,通过HTTP加载插件。线程安全。类型安全。支持缓存。插件可以使用一个单独的ClassLoader进行可以分离

     

    相应接口说明

    PluginManager pm=PluginManagerFactory.createPluginManager();

    pm.addPluginsFrom(new File("myPluginDir/").toURI());

     

    /*PluginManagerFactory类是为了创建一个新的插件管理中心,这是使用jspf的入口和开始点。*/

     

    public void addPluginsFrom(URI url, AddPluginsFromOption... options);

    (@param1 url就是指加载插件的路径

      @param2 忽略不使用)

    /*插件管理器从指定路径加载一个插件,这个路径可以是文件夹下的zip文件,jar文件,也可以是类文件。插件管理器将寻找含有@PluginImplementation 注释的类(classes),并且根据这个注释来初始化插件*/

    addPluginsFrom(new URI("classpath://*"))

    加载所有插件在当前的类路径

     

    addPluginsFrom(new File("plugins/").toURI())

     加载所有指定路径内的插件

     

    addPluginsFrom(new File("plugin.jar").toURI())

    加载一个jar格式的插件

     

     

    addPluginsFrom(new URI("http://sample.com/plugin.jar"))

    从网络路径上下载并且加载插件

     

    addPluginsFrom(new ClassURI(ServiceImpl.class).toURI())

    直接加载一个插件实现的类文件

     

    public <P extends Plugin> P getPlugin(Class<P> plugin, GetPluginOption... options);

    (@param1 plugin就是指插件的类文件,如plugin1.class....

      @param2 忽略不使用)

     

     

    如何使用:

    通过http://code.google.com/p/jspf/downloads/list 

    下载文件,在java工程中导入jspf.core-1.0.0.jar,仿照下面介绍的简单例子就可以实现一个简单的插件管理程序。

     

    代码示例:利用jspf框架加载两个插件的实现

    1. 创建一个java接口文件CoolPlugin,代码如下:

    package coolplugin;

    import net.xeoh.plugins.base.Plugin; 

     

    public interface CoolPlugin extends Plugin

    {

    public String sayCool();

    }

     

    extends Plugin其中Plugin是jspf.core-1.0.0.jar中package net.xeoh.plugins.base中提供的public interface Plugin

     

     

    创建一个java类文件,CoolPluginImpl,代码如下:

    package impl;

    import coolplugin.CoolPlugin;

    import net.xeoh.plugins.base.annotations.PluginImplementation;

    @PluginImplementation

    public class CoolPluginImpl implements CoolPlugin

    {

    public String sayCool()

    {

    return "Hello!Cool!";

    }

    }

    (上述插件接口的实现@PluginImplementation不可少

    这样就完成了第一个Cool插件的编写

     

    2. 创建一个java接口文件HotPlugin,代码如下:

    package hotplugin;

    import net.xeoh.plugins.base.Plugin; 

     

    public interface HotPlugin extends Plugin

    {

    public String sayHot();

    }

     

    创建一个java类文件,HotPluginImpl,代码如下:

    package impl;

    import hotplugin.HotPlugin;

    import net.xeoh.plugins.base.annotations.PluginImplementation;

    @PluginImplementation

    public class HotPluginImpl implements HotPlugin

    {

    public String sayHot()

    {

    return "Hello!Hot!";

    }

    }

     

    这样就完成了第二个Hot插件的编写

    3.编写插件管理中心main,代码如下

    public static void main(String[] args) throws MalformedURLException

    {

    PluginManager pm = PluginManagerFactory.createPluginManager();

    /*load classpath*/

    pm.addPluginsFrom(new File("bin/").toURI());

     

    CoolPlugin plugin1 = pm.getPlugin(CoolPlugin.class);

    System.out.println(plugin1.sayCool());

     

    HotPlugin plugin2 = pm.getPlugin(HotPlugin.class);

    System.out.println(plugin2.sayHot());

    }

     

    运行后得到的结果是

    "Hello!Cool!"

    "Hello!Hot!"

     

    利用"addPluginsFrom("...",new OptionReportAfter());"监视方法,可以获得详细信息:

    Class Report <<<

        ****.CoolPluginImpl (status:'SPAWNED'; dependencies:''; origin:'file:*****;)

        ****.HotPluginImpl (status:'SPAWNED'; dependencies:''; origin:'file****/';)

    >>> Object Report <<<

        ****.CoolPluginImpl @162db76 (status:'ACTIVE')

    ****.HotPluginImpl @21a14e (status:'ACTIVE')

    说明两个插件加载成功

    本文出自 “永远的朋友” 博客,请务必保留此出处http://yaocoder.blog.51cto.com/2668309/563347

  • 相关阅读:
    深度学习(二十九)Batch Normalization 学习笔记
    白化(预处理步骤)【转】
    pytorch 优化器调参
    『PyTorch』第十一弹_torch.optim优化器 每层定制参数
    pytorch adam 源码 关于优化函数的调整 optimizer 调参 重点
    PyTorch-Adam优化算法原理,公式,应用
    adam调参
    错误:该行已经属于另一个表
    如何用xmlspy将xml文档生成xsd文件
    端口与安全
  • 原文地址:https://www.cnblogs.com/chenying99/p/2994529.html
Copyright © 2020-2023  润新知