• Spark研究笔记8:重要的工厂类PluginManager(原创) CVT


    PluginManager 负责装载所有的插件和Workspaces。

    私有域:

    private final List<Plugin> plugins = new ArrayList<Plugin>();//Plugin接口
    
    //PublicPlugin是注册的插件,字面含义是公开
        private final List<PublicPlugin> publicPlugins = new CopyOnWriteArrayList<PublicPlugin>();
    //单例管理器
        private static PluginManager singleton;
        private static final Object LOCK = new Object();
    
    //Plugins 目录下的文件
        public static File PLUGINS_DIRECTORY = new File(Spark.getBinDirectory().getParent(), "plugins").getAbsoluteFile();
    
        private Plugin pluginClass;
        private PluginClassLoader classLoader;
    
    //黑名单插件,也就是被禁用的插件
        private Collection<String> _blacklistPlugins;

    构造函数:
    private PluginManager() {
            try {
    //定义PLUGINS_DIRECTORY
                PLUGINS_DIRECTORY = new File(Spark.getBinDirectory().getParentFile(), "plugins").getCanonicalFile();
            }
            catch (IOException e) {
                Log.error(e);
            }
    
            // Do not use deployable plugins if not installed.
            if (System.getProperty("plugin") == null) {
                movePlugins();
            }
    
    
            // Create the extension directory if one does not exist.
            if (!PLUGINS_DIRECTORY.exists()) {
                PLUGINS_DIRECTORY.mkdirs();
            }
            
            _blacklistPlugins = Default.getPluginBlacklist();
    
    //Default.getPluginBlacklist定义了插件黑名单,在default.properties里设置,用于禁用插件,第132行:
    # Put plugins here that you dont want enabled
    # comma separated, case insensitive
    # names of plugins can be found in the plugin.xml
    # example: Fastpath,Jingle Client,Phone Client,Window Flashing Plugin
    # default is empty
    PLUGIN_BLACKLIST =
    # Disable Plugins by entrypoint Class 
    # Comma seperated, case sensitive
    # example org.jivesoftware.fastpath.FastpathPlugin
    # default is empty
    PLUGIN_BLACKLIST_CLASS =
        }

    几个重要的方法

      /**
         * 载入所有的插件(通过plugins.xml、lib)
         */
        public void loadPlugins() {
    
    
      /**
         载入已注册插件*/
        private Plugin loadPublicPlugin(File pluginDir) {
    
    
        /**
         * 插件初始化*/
        public void initializePlugins() {
    
    
        /**
         * 安装新插件*/
        public void addPlugin(PublicPlugin plugin) throws Exception {
  • 相关阅读:
    Jquery前端分页插件pagination同步加载和异步加载
    Jquery前端分页插件pagination同步加载和异步加载
    jQuery实现多种切换效果的图片切换的五款插件
    jQuery实现多种切换效果的图片切换的五款插件
    HTML5在客户端存储数据的新方法——localStorage
    HTML5在客户端存储数据的新方法——localStorage
    jQuery+ localStorage 实现一个简易的计时器
    jQuery+ localStorage 实现一个简易的计时器
    浅谈移动端页面无刷新跳转问题的解决方案
    openjudge 9269:Big String超级字符串
  • 原文地址:https://www.cnblogs.com/openfire/p/3047620.html
Copyright © 2020-2023  润新知