zoukankan      html  css  js  c++  java
  • Eclipse自动插件依赖的一种配置解决方式

      Eclipse的插件具有以下特点:

    (1)每一个插件有自己独立的classloader

    (2)插件资源的交互通过MENIFEST.MF中"Export-Package, Require-Bundle, Import-Package"等属性控制

    (3)插件不能相互依赖

      最近开发的系统需要进行权限控制,控制粒度到视图的定义、命令的定义等等。当系统启动的时候,需要根据配置(数据库保存)加载当前用户可用的配置,这样问题就来了:

        Eclipse的插件是需要依赖的,才能引用。例如B依赖A,则B可以引用A,但A不依赖B,A不能调用B的资源。这意味着,如果A作为权限检测并加载插件配置的类,是不能引用B的类的。一种解决方案,就是A加入对B的依赖。但是当系统变大,不可能是一个开发组开发时,A怎么会知道到底有些什么插件呢?显然它不可能先知先觉。因此存在问题。

      幸好,Eclipse提供了对MENIFEST文件的扩展,扩展了Eclipse-BuddyPolicy指令。

    网址:http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fmisc%2Fbundle_manifest.html  给出了此指令的介绍

    The Eclipse-BuddyPolicy header is used to specify the buddy classloading policies for a bundle.The Eclipse-BuddyPolicy header must use the following syntax:

    Eclipse-BuddyPolicy ::= ( policy-name ) ( ',' policy-name ) *
    policy-name ::= ( 'dependent' | 'global' | 'registered' | 
                      'app' | 'ext' | 'boot' | 'parent' )
    
      • registered - indicates that the buddy mechanism will consult bundlesthat have been registered to it. Bundle willing to be registered to a particular bundle add in their manifest: "Eclipse-RegisterBuddy: <bundleSymbolicName>";
      • dependent - indicates that the classes/resources will be looked uptransitively in all the dependent of the bundle;
      • global - indicates that the classes/resources will be looked up in theglobal pool of exported package;
      • app - indicates that the application classloader will be consulted;
      • ext - indicates that the extensiont classloader will be consulted;
      • boot - indicates that the boot classloader will be consulted.

      于是根据上述描述,在A插件MENIFEST文件中插入

    Eclipse-BuddyPolicy: global

      指令,然后B引用A,A不需要引用B,但是在A中需要调用的B的资源,需要在B中Export出来。这样,就可以在A中使用B的资源了。

      通过这种方式,实现了根据用户角色,过滤界面的功能,很好地实现了界面部分权限的控制。

  • 相关阅读:
    java private修饰的类和变量
    Volatile和Synchronized对可见性和原子性的支持
    Socket套接字
    Spring MVC请求执行流程
    Spring AOP术语解释
    equals()和==的区别
    约瑟夫环之递归算法
    数据库特性之原子性和一致性
    设计模式之单例模式
    平衡二叉树的插入旋转
  • 原文地址:https://www.cnblogs.com/pangblog/p/3262793.html
Copyright © 2011-2022 走看看