??xml version="1.0" encoding="utf-8" standalone="yes"?>综合精品一区,国产精品久久久久9999赢消,精品视频高潮http://www.aygfsteel.com/BlueDavy/category/1514.html不懂理论只懂实战的粗人?lt;br> &nbsp;&nbsp; <a ><b><font color=red>共有<script src=http://fastonlineusers.com/online.php?d=bluedavy.blogjava.net></script>人在同时阅读此Blog</font></b></a>zh-cnTue, 27 Feb 2007 08:40:18 GMTTue, 27 Feb 2007 08:40:18 GMT60ZEclipse Equinox的插件框ӞTPFhttp://www.aygfsteel.com/BlueDavy/archive/2006/08/18/64440.htmlBlueDavyBlueDavyFri, 18 Aug 2006 13:24:00 GMThttp://www.aygfsteel.com/BlueDavy/archive/2006/08/18/64440.htmlhttp://www.aygfsteel.com/BlueDavy/comments/64440.htmlhttp://www.aygfsteel.com/BlueDavy/archive/2006/08/18/64440.html#Feedback6http://www.aygfsteel.com/BlueDavy/comments/commentRss/64440.htmlhttp://www.aygfsteel.com/BlueDavy/services/trackbacks/64440.html阅读全文

BlueDavy 2006-08-18 21:24 发表评论
]]>
插g开发框架的思?/title><link>http://www.aygfsteel.com/BlueDavy/archive/2006/05/28/48593.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Sun, 28 May 2006 07:05:00 GMT</pubDate><guid>http://www.aygfsteel.com/BlueDavy/archive/2006/05/28/48593.html</guid><wfw:comment>http://www.aygfsteel.com/BlueDavy/comments/48593.html</wfw:comment><comments>http://www.aygfsteel.com/BlueDavy/archive/2006/05/28/48593.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/BlueDavy/comments/commentRss/48593.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/BlueDavy/services/trackbacks/48593.html</trackback:ping><description><![CDATA[     摘要: 插g开发框架其实和目前开源界行的MVC框架之类的相同,都决定了Zq个框架的开发方式,如基于MVC框架Q就会按照MVC思想来进行开发,而插件开发框架呢Q也是同样如此,p求基于插件的方式来进行开发,不过插g开发框架和MVC框架又有不同Q插件开发框架是一个可以成为系l基架构的框Ӟ而MVC框架通常来讲不以成为,如在目前的MVC框架Webwork、Struts上我们通常都需要加上Spring、Hibernate来构成系l完整的基础架构Q这个时候由于MVC框架的实现是没有标准可参照的Q就造成了在各种pȝ中Ş成了不同的但很类似的基础架构Q但却造成了无法复用的现象Q插件开发框架则是作为统一pȝ基础架构的一U开发方式,它得系l的复用成ؓ了可能,而同时由于插件开发框架对于动态性的支持Q得系l更加的灉|和可扩展?<br>来看看一个插件开发框Ӟ应该提供些什么东西,作ؓ改变pȝ架构思想的框Ӟ插g框架需要考虑很多斚wQ如开发、测试、部|等Qȝ下来一个插件框架应提供插g的开发规范;插g开发、调试的IDEQ插件的试ҎQ插件的部v{略以及插g的管理端?nbsp; <a href='http://www.aygfsteel.com/BlueDavy/archive/2006/05/28/48593.html'>阅读全文</a><img src ="http://www.aygfsteel.com/BlueDavy/aggbug/48593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/BlueDavy/" target="_blank">BlueDavy</a> 2006-05-28 15:05 <a href="http://www.aygfsteel.com/BlueDavy/archive/2006/05/28/48593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Service-Oriented Component Model(SOCM)http://www.aygfsteel.com/BlueDavy/archive/2006/04/15/41268.htmlBlueDavyBlueDavySat, 15 Apr 2006 13:33:00 GMThttp://www.aygfsteel.com/BlueDavy/archive/2006/04/15/41268.htmlhttp://www.aygfsteel.com/BlueDavy/comments/41268.htmlhttp://www.aygfsteel.com/BlueDavy/archive/2006/04/15/41268.html#Feedback0http://www.aygfsteel.com/BlueDavy/comments/commentRss/41268.htmlhttp://www.aygfsteel.com/BlueDavy/services/trackbacks/41268.html阅读全文

BlueDavy 2006-04-15 21:33 发表评论
]]>
Declarative Services――Service-Oriented Component Modelhttp://www.aygfsteel.com/BlueDavy/archive/2006/04/07/39880.htmlBlueDavyBlueDavyFri, 07 Apr 2006 09:27:00 GMThttp://www.aygfsteel.com/BlueDavy/archive/2006/04/07/39880.htmlhttp://www.aygfsteel.com/BlueDavy/comments/39880.htmlhttp://www.aygfsteel.com/BlueDavy/archive/2006/04/07/39880.html#Feedback2http://www.aygfsteel.com/BlueDavy/comments/commentRss/39880.htmlhttp://www.aygfsteel.com/BlueDavy/services/trackbacks/39880.html阅读全文

BlueDavy 2006-04-07 17:27 发表评论
]]>
ZEquinox开发系l的ȝhttp://www.aygfsteel.com/BlueDavy/archive/2006/03/12/34930.htmlBlueDavyBlueDavySun, 12 Mar 2006 13:32:00 GMThttp://www.aygfsteel.com/BlueDavy/archive/2006/03/12/34930.htmlhttp://www.aygfsteel.com/BlueDavy/comments/34930.htmlhttp://www.aygfsteel.com/BlueDavy/archive/2006/03/12/34930.html#Feedback3http://www.aygfsteel.com/BlueDavy/comments/commentRss/34930.htmlhttp://www.aygfsteel.com/BlueDavy/services/trackbacks/34930.htmlEquinoxQ我不想多做介绍Q相信很多h都有所了解了,不了解的可具体去www.eclipse.org/equinox看看?BR>最q基于equinox做了一个系l,q是到了一些问题,当然也得C在插件体pL构下的不优点,在这里也做个ȝ?BR>M而言Q基于equinox做开发对于大多数java开发h员来说应该不会有太多改变的感觉,最多改变的感觉应该是带l设计师Q设计师需要有发挥插g体系架构优点以及减少其带来的~点的能力,^_^
1、部|不是很方便
      equinox默认提供的是一个console端的插g部v理Q部|v来需要通过"install reference:file://"q样的方式来安装插gQ不是特别的方便?BR>      ^_^Q由于我当时使用的时候equinoxq没提供osgi中httpservice的实玎ͼ便用了oscar中提供的httpservice的实玎ͼZq个httpservice的实现写了一个web端的插g理的工P呵呵Q将来整理后会将q个bundle公布出来Q到时大家直接下载就可以用了?BR>      在部|方面还有一个不方便的地方就是不能指定插件的启动序Q现在equinox是通过config.ini中来实现插g启动序的控制的Q这个在我的web端的插g理工具中也提供直接Q可直接讑֮插g的启动顺序?BR>2、Classpath的问?BR>      q个问题是我在用equinox时比较头疼的一个问题,我在bundle中用了spring IoC containerQ而由于spring中用的不是当前cȝ加蝲器,D在加载配|文件的时候会出错Q只得直接修改了spring中那些部分的代码Q将其改Z用当前类的加载器?BR>       在集成其他一些自己含有classpath的东西的时候也很容易出现这个问题?BR>       虽然从原理上来讲q个是可以理解的Q因为在插g体系l构中每个插仉拥有独立的插件类加蝲器,q个实会对集成的有些东西生媄响,抑或我们应该理解为集成的那些东西在这斚w设计有缺P
3、有利于面向接口~程的执?BR>      q个应该说是属于插g体系l构的好处,每个插g可以控制自己对外所暴露的包Q这个时候就可以只暴露接口所在的包,^_^Q呵呵,面向接口的编E就q么被强制的执行了?BR>4、插件开发的IDE
      q点是我觉得equinox的天然优势,拥有一个eclipseq么优秀的插件开发的IDEQ^_^
      支持了插件的调试...
      我认为的最重要的一Ҏ它解决了插g依赖的问题,通常在出现project依赖的时候我们都需要引用该project或是该project生成的jarQ而在插g体系l构中只需要在插g文g中定义所依赖的包卛_Q这个就解决了去引用project那样方式引v整个目工程包؜乱和开发不便的现象?
5、插件的试
      q点我想也是大家很关心的Q不q大家可以放心,基本没什么不同的Qunit testl箋使用Mock方式完成所试的unit的外部依赖的部分Q集成测试则需要启动equinox容器Q这点应该没什么不能接受的?BR>6、Bundle和Service的定?BR>      q个是插g体系l构带来的一个挑战,如果准确的定义系l中的bundle和service是很关键的一个问题,q对于发挥插件体pȝ构的bundleU别、serviceU别的重用性至关重要,同时对于整个目l构的清晰度也会产生很大的媄响,形成bundle的清晰的service依赖l构?BR>7、面向服务的体系
      我想q也同样是象equinoxq样的插件框架引发用者的思考,pȝ采用的应该是一U面向服务的体系Q服务才是系l的核心Qbundle只是一个管理器而已Q这个时候怎么栯计出动态、松散耦合的服务体pL很关键的?BR>
equinox一直都在发展之中,它的maillist一直就非常的热闹,而且现在对于osgi中的service它基本都实现了,也已l开始提供对于servlet container集成的支持,^_^Q极度支持equinoxQ虽然它q需要不断的努力.....
可以看得出,l过我上面的ȝQ大家其实要担心的是引用一U新的体pȝ构带来的设计层面的变革,而不是开发实现层面,^_^ 



BlueDavy 2006-03-12 21:32 发表评论
]]>
思考插件架构体p?/title><link>http://www.aygfsteel.com/BlueDavy/archive/2005/11/15/19820.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Tue, 15 Nov 2005 03:09:00 GMT</pubDate><guid>http://www.aygfsteel.com/BlueDavy/archive/2005/11/15/19820.html</guid><wfw:comment>http://www.aygfsteel.com/BlueDavy/comments/19820.html</wfw:comment><comments>http://www.aygfsteel.com/BlueDavy/archive/2005/11/15/19820.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.aygfsteel.com/BlueDavy/comments/commentRss/19820.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/BlueDavy/services/trackbacks/19820.html</trackback:ping><description><![CDATA[<P>插g架构体系是我一直就非常x的内容,其实插g架构体系的发展已l有很久的背景了Q插件架构体pȝ优点我们也是能看的非常明显,象硬件一Lx即用、无论对于公司还是业界而言的良好的U篏方式、ؓ公司或业界提供统一而规范的开发方式以及稳定的内核架构{等Q这些优Ҏ论对于公司还是业界来说都是非帔R要的?BR>插g架构体系基本的一个概念就是基于松散的模块U篏方式Q通过新增插g以及扩展原有插g的方法来完成pȝ的实玎ͼ凡事有利必有弊,在看到插件架构体pȝq些优点的同Ӟ在实现和使用插g架构体系的时候仍然会到不少的问题,我大概的整理了一下,主要有:<BR>1、插件的定义<BR>      插g的定义可谓是插g架构体系在用时会碰到的最大的问题Q首先要解决的问题就是何谓插件、插件如何去定义Q何谓插件这个大家的看法都会有所不同Q由于对于何谓插件的看法不同Q必然就D了在整个pȝ的设计时采用了不同的设计方式Q主要是在插件的_度控制上会有不同的设计方式?BR>      个h觉得也许采用模块作ؓ插g是一U可行的ҎQ采用模块作为插件的核心思想是按一U从至下的设计理念Q也是架构设计中生的模块视图首先作ؓpȝ的插件构成视图,ҎҎ块的详细设计此时又可Ҏ块的插gq行l一步的划分Q或者是插件划的更l,或者是采用插g的扩展机制去实现?BR>      插g的定义则是带来了一些设计上的难度的Q我仍然觉得需要将插g视ؓ黑盒ȝQ插仉要提供什么样的功能、插仉要什么样的运行环境、插仉要暴露哪些包{等Q这个在Osgi中都有相应的映射Q在Z插g架构体系q行pȝ构徏的时候插件的_度、定义我觉得q是最难把握的Q甚臌得难度上会超q以前的模块设计Q需要的是更范的模块式的设计Q觉得这个在中小型Y件企业中往往是很隑ց到的Q主要仍然是架构设计时的控制Q在设计旉要的因素在于保持pȝ的松散结构,至于概要设计时则完全可按照架构设计的U束去进行,详细设计则完全和qx的做法一栗?BR>2、插件的依赖<BR>      插g的依赖主要有两种Q一是对于系l已有插件的依赖Q另一斚w则是对于外部jar包的依赖。这都是在设计时需要做虑的,对于插g架构体系而言对已有插件的依赖和对外部jar包的依赖q个差别比较大了,其实q个在设计上q好办,因ؓ可以通过重构Q本来一直依赖觉得最困难的是对其他插件的依赖怎么办,N要去引用其他plugin的libQ在eclipse ide中是解决了这个问题的Q所以现在来说插件的依赖在插件体pL构中显得没那么困难了,q说明插件的依赖的解决依赖于一个良好的插g开发IDE?BR>3、插件的试<BR>      插g的测试我q指的不是运行的功能试Q而是单元试Q感觉这个在现在的插件架构体p里q是比较困难的,因ؓ在一U松耦合的架构体pMQ对于其他插件的依赖是要在容器运行期才能够获取的Q觉得这个有点变成了当时ejb container的问题,现在好像得通过mock以及其他的方法去解决Q另外一个也许是IoC的策略?q方面需要进一步思考,<BR>4、插件的调试<BR>      插g的调试主要是依赖容器的调试,现在的eclipse ide已经支持插g的调试,q且好像是支持插件的q程调试的?BR>5、插件开发学习的门槛<BR>       q前来说插件开发学习的门槛q不低的,个h觉得臛_要对插g体系架构有一定的了解(例如ZOsgi的插件框Ӟ那就要求对OSGI有一定的熟悉)Q但相对q个门槛而言Q其获得的h值是值得的?BR><BR>其实讲了q么些问题,集中的主要在于基于插件架构体pȝ应用框架以及业务pȝ的设计方式将和以前的会有些变化,q个也是可以理解的,毕竟是受技术架构约束的Q另外一斚w则主要集中在插g开发的易性和质量的保证,q个得依靠一个强大的插g开发IDE?/P><img src ="http://www.aygfsteel.com/BlueDavy/aggbug/19820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-11-15 11:09 <a href="http://www.aygfsteel.com/BlueDavy/archive/2005/11/15/19820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSGI与Plugin Architecturehttp://www.aygfsteel.com/BlueDavy/archive/2005/11/06/18491.htmlBlueDavyBlueDavySun, 06 Nov 2005 12:19:00 GMThttp://www.aygfsteel.com/BlueDavy/archive/2005/11/06/18491.htmlhttp://www.aygfsteel.com/BlueDavy/comments/18491.htmlhttp://www.aygfsteel.com/BlueDavy/archive/2005/11/06/18491.html#Feedback5http://www.aygfsteel.com/BlueDavy/comments/commentRss/18491.htmlhttp://www.aygfsteel.com/BlueDavy/services/trackbacks/18491.html首先q是来说说作Z个Plugin Architecture应该提供哪些功能Q?BR>1、插件的定义?BR>2、插件的加蝲?文g、URL{Ş?
3、插件的生命周期理?安装、卸载、启动、停止、更?
4、插仉的交互机制?BR>5、插件的扩展?BR>从非功能性角度来Ԍ作ؓPlugin Architecture应该对原有的非Plugin Architecture的系l的攚w不能造成q大的R入性,q有是Plugin的管理以及易开发,其次作ؓPlugin ArchitectureQ其最大的优点莫过于可以保证系l构成了一个^E的l构体系Q所有的交互、扩展都通过Plugin来进行,q同时保证各个Plugin的独立性,使得pȝZ一U拼装式的结?松耦合)Q每个Plugin对于外部而言都是一个黑盒,那么p相应的告诉外部这个黑盒所能提供的功能Q调用的方式{?BR>现在来说说OSGIQOsgi规范?999q开始制定,目前版本是R4QOSGI之前主要用于|络讑֤的服务架构体p,那是一个典型的松耦合的服务架构体p,在被eclipse引入作ؓ其插件体pL构后OSGI也被业界所xQR4更是吸取了Eclipse的很多优点修订而成Q相对于上面的功能点来说说OSGI对应的规范点Q?BR>1、插件的定义?BR>       OSGI规范中将插gUCؓBundleQBundle作ؓ整个插g的生命周期管理对象,负责插g的启动和停止动作Q通过Meta-inf/mainfest.mf来描qBundleQ主要描qBundle的名U、厂商、版本、对外暴露的包、对外暴露的服务、依赖的插g、引用的包、动态引用的包等Q具体可参考OSGI R4中Framework Specification ChapterQ插件可通过Bundle对象获取插g的定义信息?BR>2、插件的加蝲?文g、URL{Ş?
      OSGI规范中定义通过BundleContext来完成Bundle的加载工作,每个Bundle拥有独立的classloader以及BundleContext?BR>3、插件的生命周期理?BR>      OSGI规范中定义通过BundleContext对Bundleq行生命周期的管理,或通过Bundle本n对象来进行?BR>4、插仉的交互机制?BR>      OSGI规范中定义通过插g的定义中定义所需依赖的插件以及所需引用的包来实现插件的交互机制?BR>5、插件的开发?BR>      OSGI规范中定义一个新的插件的开发需要的是构成其BundleActivator对象以及完成插g定义的描q?BR>6、插件所暴露的功能?BR>      OSGI规范中定义通过在插件定义文件中描述插g所暴露对外的服务来说明插g对外所暴露的功能以及允许外部对此插件引用的包?BR>
对于插g如何扩展OSGI规范中提及的是在修改插g后插件的自动更新以及热加载来实现Q而不是象Eclipse的扩展点机制?BR>
Ҏ上面我们可以看出OSGI规范实非常适用于Plugin ArchitectureQ对应点基本都存在,不过上面只是单的描述Q具体的大家可参看OSGI R4Q除了对于Framework的定义,OSGI R4中还定义了一些常用的服务的规?如log、configuration、security{?Q而且有Eclipse作ؓ其R4的RIQEclipse则得插件的理?nbsp;扩展以及易开发得C保证Q在理上Eclipse上提供了理的^収ͼ在扩展上eclipse上提供了扩展ҎӞ在易开发上eclipse提供了ideQ得插件的代码开发、定义描q、调试甚至部|都变得非常的简单,而且eclipse会根据插件定义文件中需引用的包以及依赖的插件而自动的构造相应的classloader而无需d用那些libQ这保证了插件的独立?设计?Q呵呵,但大家是不是有发C么不点呢?
个h觉得OSGI规范中的不Ҏ插g的管理机制的定义Q插件的理机制上我觉得可以参考JMX增加一个Connector or Protocol layer pluginQ^_^
插g的扩展机制由eclipse弥补了,其他的还真想不出什么不点了?BR>
H然开始觉得osgi比jmx+ioc实现的plugin architecture更ؓ的好Q以前觉得osgi没有jmx+ioc好的原因在于osgi对于插g的独立性保持的不够Q意思就是在插g对于外部或其他插件作为黑盒而言Q没有明插件功能的描述以及调用方式的描qͼq个怪自׃前对osgi规范看的不够仔细Q其实就是serviceQ而在独立性方面以前是想着在代码中如果要直接调用其他插件的serviceQ那岂不是要引用那个插g的包Q而这个问题在eclipse ide中是解决了的Q只需要在定义文g中定义所依赖的插件即可,而不需要引用那个包Q那么这L立性的问题自然也解决了Q还有一个是理性,在这斚w仍然是jmx更ؓ强,不过完全可以在osgi中增加一个admin plugin的实玎ͼ吸取jmx在这斚w的优点,呵呵Q而相比之下现在变成了jmx+iocq没有一个规范式的体pL构,实现h只能是各按各的想法,而osgi的话毕竟是个规范Q加上已l有eclipseq个现成的,何必再去发明轮子呢,^_^Q也许某一天plugin architecture也会被列入jsr规范之中的?img src ="http://www.aygfsteel.com/BlueDavy/aggbug/18491.html" width = "1" height = "1" />

BlueDavy 2005-11-06 20:19 发表评论
]]>
Eclipse(3.1) Plugin Framework(ZOSGI的Plugin Architecture)http://www.aygfsteel.com/BlueDavy/archive/2005/07/03/7069.htmlBlueDavyBlueDavySun, 03 Jul 2005 13:57:00 GMThttp://www.aygfsteel.com/BlueDavy/archive/2005/07/03/7069.htmlhttp://www.aygfsteel.com/BlueDavy/comments/7069.htmlhttp://www.aygfsteel.com/BlueDavy/archive/2005/07/03/7069.html#Feedback13http://www.aygfsteel.com/BlueDavy/comments/commentRss/7069.htmlhttp://www.aygfsteel.com/BlueDavy/services/trackbacks/7069.html概述
Eclipse中最出彩的部分莫q于它的Plugin FrameworkQ可以说Eclipse在一定程度上使得Plugin机制得以行Q当ӞEclipse的优势不仅仅在此Q但正因为采用了Plugin机制QEclipse才得以被不断的扩充,来强大。一直以来就惛_析Eclipse的Plugin FrameworkQ由于各U原因一直耽搁Q刚好这个周末没什么事Q下定决心对其进行了研究和分析,Ҏ很原始,是对Eclipse的启动过E进行分析,Z的是Eclipse 3.1的版本,分析q程׃在这说了Q主要是说说分析出来的心得?BR>架构上来讲Eclipse基本采用的是Kernel+Core Plugins+Custom Plugins的结构体p,除了Kernel部分外均为PluginQ所以可UCؓall are pluginsQ凡是Plugin的部分都是可被替换的?/P>

OSGI
Eclipse 3.0后采用的是OSGI来作为其Plugin Architecture实现的依据,鉴于此就得简单提提OSGI了,主要从Plugin的角度来分析OSGIQOSGI概念中主要分ZBundle和ServiceQ可以认为Bundle是一个模块的理器,主要是通过BundleActivator理模块的生命周期,而Service则是q个模块可暴露对外的服务对象Q这里体COSGI和传l的Plugin Framework不同的一个地方,理和静态结构分开Q在OSGI中通过在manifest.mf文g中增加一些内Ҏ发布BundleQ在其中描述了Bundle的提供商、版本、唯一ID、classpath、暴露对外的包、所依赖的包Q每个Bundle拥有自己的ClassLoader以及contextQ通过context可进行服务的注册、卸载等Q这些操作都会通过事g机制q播l相应的其他的BundleQ一般来说都为通过在Bundle中编写初始需要注册的服务的方法来完成Bundle可供外部使用的服务的暴露功能Q如需要调用其他Plugin提供的服务可通过context的getServiceReference先获取Service的句柄,再通过context.getService(ServiceReference)的方法获取Service的实体?/P>

Eclipse Plugin定义
Eclipse中的Plugin的概念ؓ包含一pd服务的模块即Z个Plugin。既然是遵@OSGI的,也就意味着Plugin通常是由Bundle和N多Service共同构成的,在此基础上Eclipse认ؓPlugin之间通常存在两种关系Q一Uؓ依赖Q一Uؓ扩展Q对于依赖可通过OSGI中元描述信息里添加需要引用的Plugin卛_实现Q但扩展在OSGI中是没有定义的,Eclipse采用了一个Extension Point的方式来实现Plugin的扩展功能?BR>l合OSGI
Eclipse遵@OSGI对于Plugin的ID、版本、提供商、classpath、所依赖的plugin以及可暴露对外的包均在manifest.mf文g中定义?BR>Plugin Extension Point
对于扩展QEclipse采用Extension Point的方式来实现Q每个Plugin可定义自qExtension PointQ同时也可实现其他Plugin的Extension PointQ由于这个在OSGI中是未定义的Q在Eclipse中仍焉过在plugin.xml中进行描qͼ描述的方法ؓ通过<extension-point id="" name="" schema="">的Ş式来定义Plugin的扩展点Q通过<extension point="">的Ş式来定义实现的其他Plugin的扩展点Q所提供的扩展点通过schema的方式进行描qͼ详细见eclipse extension-point schema规范Qؓ了更好的说明扩展点这个概念,举例如下Q如工具栏就是工hPlugin提供的一个扩展点Q其他的Plugin可通过此扩展点d按钮臛_h中,q可相应的添加按钮所对应的事?当然Q此事g必须实现工具栏Plugin此扩展点所要求的接?Q工h的Plugin通过callback的方式来相应的响应按钮的动作。可见通过Extension Point的方式可以很好的提供Plugin的扩展方式以及实现扩展的方式?/P>

Eclipse Plugin Framework
那么Eclipse是如何做到Plugin机制的实现的呢?Q还是先讲讲Eclipse的设计风|Eclipse在设计时有个重要的分层法则,卌a层相兛_语言层无关的代码分开(如jdt.core和core)Q核心与UI分开(如workbench.ui和workbench.core)q两个分层法则,q个在Eclipse代码中处处可见,在Plugin Framework部分也充分得体现了这个,遵@OSGIQEclipse首先是实C一个OSGI ImplQ这个主要通过它的FrameWork、BundleHost、ServiceRegistry、BundleContextImpl{对象来实现Q如果关心的话大家可以看看这部分的代码,实现了Bundle的安装、触发、卸载以及Service的注册、卸载、调用,在Plugin机制上Eclipse采用的ؓlazy load的方式,卛_调用时才q行实际的启动,采用的ؓ句柄/实体的方式来实现Q外部则通过OSGIq行启动、停止等动作Q各Plugin则通过BundleContext来进行服务的注册、卸载和调用Q这是OSGI的部分实现的单介l?BR>那么Extension Point斚wEclipse是如何实现的呢,在加载PluginӞEclipse通过对plugin.xml的解析获取其中的<extension-point>节点?lt;extension>节点Qƈ相应的注册到ExtensionRegistry中,而各个提供扩展点的Plugin在提供扩展点的地方进行处理,如工hPlugin提供了工h的扩展点Q那么在构成工具栏时Plugin通过Platform.getPluginRegistry().getExtensionPoint(扩展点ID)的方法获取所有实现此扩展点的集合IExtensionPoint[]Q通过此集合可获取IConfigurationElement[]Q而通过q个可以获?lt;extension point="">其中的配|,同时q可通过IConfigurationElement创徏回调对象的实例,通过q样的方法Eclipse也就实现了对于Plugin的扩展以及扩展的功能的回调。在Plugin Framework中还涉及很多事g机制的用,比如Framework的事件机Ӟ以便在Bundle注册、Service注册的时候进行通知?/P>

ȝ
通过对Eclipse启动q程的分析,可清晰的看到Eclipse Kernel+Core Plugins+Application Plugins的方式,在代码中分别对应为loadBasicBundles和registerApplicationServicesQloadBasicBundles通过加蝲config.ini中的osgi.bundles完成基本的bundles的加载,ȝ看这个配|会发现是org.eclipse.core.runtimeq有一个updateQcore.runtime又会通过IDEApplication来完成整个Eclipse的启动,同时会注册所有与workbench相关的plugin?BR>Eclipse׃以前版本的Plugin Framework是没有采用OSGI的,所以通过EclipseAdaptor的方式来实现与以往的兼容,目前新的Plugin采用的方式基本就是manifest.mf描述Plugin OSGI部分的信息,Plugin.xml描述扩展点的信息?BR>Eclipse中有非常多优U的设计,q个在看它的代码时会有很q感触Q比如Contributing to Eclipse中提到的Extension Object/Interface的设计,实是非常的不错Q虽然看C可能觉得很简单,关键是要惛_到ƈ合适的M用?BR>ȝ陈词Q^_^QEclipse Plugin Framework是采用OSGI Impl+Plugin Extension-Point的方式来共同实现的,实现了Plugin的部|Ӏ编写、独立的Classloader和Context、Plugin中Service的注册、Plugin中Service的调用、Plugin的依赖、Plugin的扩展、Plugin生命周期的管理?/P>

带来的思?BR>Eclipse Plugin Framework采用的是OSGI的实玎ͼ一定程度上我们也能看到OSGI的优点,那么JMX+IoC方式的Plugin Framework与其的比较又是在哪些斚w呢?Eclipse Plugin Framework不的地方又在哪里呢Q哪些地方值得改进呢?

 



BlueDavy 2005-07-03 21:57 发表评论
]]>
Plugin Architectureq?/title><link>http://www.aygfsteel.com/BlueDavy/archive/2005/06/30/6925.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Thu, 30 Jun 2005 03:02:00 GMT</pubDate><guid>http://www.aygfsteel.com/BlueDavy/archive/2005/06/30/6925.html</guid><wfw:comment>http://www.aygfsteel.com/BlueDavy/comments/6925.html</wfw:comment><comments>http://www.aygfsteel.com/BlueDavy/archive/2005/06/30/6925.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.aygfsteel.com/BlueDavy/comments/commentRss/6925.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/BlueDavy/services/trackbacks/6925.html</trackback:ping><description><![CDATA[<P><FONT style="BACKGROUND-COLOR: #008000" color=#ffffff size=5><STRONG>概述</STRONG></FONT><BR>Plugin ArchitectureQ无疑是如今软g界最为热门的名词Q在各种各样的解x案、白皮书中经帔R?/P> <P>看到x即用q么几个字,但真的又有多Y件做C呢,当然Q不可否认的是也有部分的软g实做到</P> <P>了,而且做的很好Q例如EclipseQ知名的插g式系l,q有象mavenq些都是Q其实portlet container</P> <P>那些也都是的Q列丑և来还真的有不。插件式pȝ带来的好处很明显Q最大程度的重用Qؓ快速的搭徏</P> <P>pȝ提供帮助Q潜在的好处在于要求pȝ以插件式的方式进行设计,帮助你更好的做到模块化的划分以及</P> <P>帮助pȝ辑ֈ良好的封装性?/P> <P><FONT style="BACKGROUND-COLOR: #008000" color=#ffffff size=5>需?BR></FONT>要做Plugin ArchitectureQ首先需要做的是如何考虑PluginQ其实也是需求,要看你是怎么看待一?/P> <P>Plugin的,认ؓ一个Plugin应该是怎么LQ认为Plugin是怎么栯l装h构成pȝ的,q个时候需?/P> <P>的是大家从需求的角度来提求,不要从技术角度来提。一个系l既然是按照Plugin的方式搭建出来,</P> <P>那么首先需要知道的是就是Plugin能提供什么样的功能,q些功能需要什么参敎ͼq是最基本的,其次?/P> <P>如何ȝ理这个PluginQ包括修改它的配|参敎ͼ对它的生命周期进行管?启动/暂停/停止{?Q这是以</P> <P>单独的Plugin角度来看Q如果这个Plugin又得调用其他Plugin提供的功能,那么应该怎么dQ考虑了这</P> <P>些后又会惛_Plugin应该怎么去部|Ӏ怎么去自动升U。从扩展斚w我们又会考虑到那么我要如何去扩展</P> <P>一个Plugin呢,q也是很关键的。这都只是简单单的提了一些Plugin的需求,归纳上面的需求可以得?/P> <P>主要的几点就是Plugin的功能的暴露、Plugin的管理、Plugin的调用、Plugin之间的协作、Plugin的部|?/P> <P>、Plugin的扩展这几个大的斚w?/P> <P><FONT style="BACKGROUND-COLOR: #008000" color=#ffffff size=5>技术简?/FONT><BR>现有的可参考的Plugin Architectureq是有比较多的,例如Eclipse、Geronimo、Maven、Pluto{等Q这</P> <P>些都是做的比较好的插件式的系l,在这里主要讲讲Eclipse如今使用的Osgi和Geronimo所使用的JMX+IoC</P> <P>方式实现的Plugin ArchitectureQ应该说两者各有千U,重点q是看对于Plugin的需求到底是怎么L</P> <P>QOsgi规范系l按照Bundle的方法进行组装,每个Bundle下包含了一pd的ServiceQ通过~写Bundle</P> <P>完成对于Bundle的管?Start、Stop)Q而Service则ؓBundle所能提供对外的功能Q通过MANIFEST.MFq?/P> <P>个标准的jar包描q文件来描述bundle所能提供的功能以及一些元数据信息Q由于对Osgi研究不深Q也?/P> <P>能大概的提提q些了,Eclipse?.0以后的版本开始采用OsgiQƈ兼容其原有的Plugin方式Q可以通过?/P> <P>读Eclipse源码M解关于基于Osgi来实现Plugin Architecture的方式,Eclipse是基本实C上述需?/P> <P>部分的,不过个h认ؓ在plugin的管理、plugin之间的协作、plugin的部|上q可以加强;接下来提?/P> <P>JMX+IoC方式Q对JMXE有了解的h都知道JMX被大量的应用服务器所使用Q如Jboss、Tomcat、Weblogic?/P> <P>WebSphere{等Q数不胜敎ͼJMX的是一个管理概念,对JMX不在此详l的介绍Q但其实它同h一?/P> <P>Plugin的概念,依照JMXpȝ可以~写MBean的方式来暴露Plugin的功能,q实现对于Plugin的管?各种</P> <P>方式Qhttp、rmi{等)、Plugin的调用、Plugin的部|Ԍ那么Z么要引入IoC呢,IoC帮助实现Plugin?/P> <P>间的协作Qƈ且是通过注入的方式来实现QIoC也不在这里详l的LqC?/P> <P><FONT style="BACKGROUND-COLOR: #008000" color=#ffffff size=5>ȝ</FONT><BR>通过对上面两U实现Plugin Architecture的简介,分别都实C需求中的内容,但都有提升的余地Q个</P> <P>为Osgi的方式需提升对于Plugin理的关?不仅是生命周期管?、而JMX+IoC方式则需提高对于</P> <P>Plugin内部l构的关?pOsgiPlugin分解ZBundle和Service)Q至于Plugin的扩展方面觉?/P> <P>Eclipse的Extension Point是非怸错的一个设计,不过同时也看出在Plugin Architecture的实C?/P> <P>本都采用了管理和静态结构分ȝҎQ其实这个好处是非常明显的,可以快速的系l原有的模块通过</P> <P>~写一个管理类的方法就可作为plugin攑օpȝ中,q提升了便性,当然最大的作用q是分清了职责,</P> <P>说一句题外话Q职责单一一直是软g设计的重中之重,此文U属抛砖引玉Q希望能听到更多关于Plugin </P> <P>Architecture的声韻I也希望大安xPlugin ArchitectureQ最q也Z一个JPFQ不知道大家是否?/P> <P>所了解?/P><img src ="http://www.aygfsteel.com/BlueDavy/aggbug/6925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-06-30 11:02 <a href="http://www.aygfsteel.com/BlueDavy/archive/2005/06/30/6925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>由Windows服务惛_?/title><link>http://www.aygfsteel.com/BlueDavy/archive/2005/06/03/5544.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Fri, 03 Jun 2005 15:17:00 GMT</pubDate><guid>http://www.aygfsteel.com/BlueDavy/archive/2005/06/03/5544.html</guid><wfw:comment>http://www.aygfsteel.com/BlueDavy/comments/5544.html</wfw:comment><comments>http://www.aygfsteel.com/BlueDavy/archive/2005/06/03/5544.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/BlueDavy/comments/commentRss/5544.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/BlueDavy/services/trackbacks/5544.html</trackback:ping><description><![CDATA[在服务的每一不是有关于q个服务所依赖的服务吗Q发现其实这是在JAVA的结构体pM一直缺乏的Q没法直接看Z赖关pLQ觉得这U其实对于组件化或者说构g化的pȝ来说是非帔R要的 Q况且现在已l到了Java软g体系开发中对于插g化越来越重视的年代,现在真的是看N多的Java的东襉K有一句本pȝ是插件化的,觉得插g化虽然是做的不错了,但发现自q然没真正dq一个合格的插g化系l的开发或者说Z一个合格的插g式^台做二次开发,唉,q也是个p|Q象Maven 2里也有一句话QEvery thing in maven2 is a plugin.<BR>应该_Microsoft的东西还是做的不错的Q虽然L有说它不E_QBug多等{,但不可否认的是,Microsoft的Y件是全世界最为成功的软gQ想惛_的多东西在被h使用着Q唉Q而且用Office以来Q真的是来觉得Microsoft的强大,在用Office的时候我常说的是l常是我想不到却很实用的功能Q它都做CQ真是没话说Q我们不从技术上d评hQ其实面向普通用L软g从技术上去评h没什么意义的Q关键是好不好用Q可以说QMicrosoft的大部分东西都具有良好的用户体验和交互?BR>今天在看别h做的一个Workflowpȝ的时候就有这么样的感惻I是,那套pȝ的技术真的可以说很烂Q但又怎么P它已l够能满客户的要求了Q客户需要的是q样的系l,你技术再先进又怎么P对于客户来言q不是一个一LpȝQ而且技术采用的太先q往往D的就是什么都做不出来的后果,当然Q也不是说不d注技术走向?img src ="http://www.aygfsteel.com/BlueDavy/aggbug/5544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-06-03 23:17 <a href="http://www.aygfsteel.com/BlueDavy/archive/2005/06/03/5544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如果要你选插件式开发^収ͼ会选一个怎么L呢?http://www.aygfsteel.com/BlueDavy/archive/2005/05/26/5236.htmlBlueDavyBlueDavyThu, 26 May 2005 13:43:00 GMThttp://www.aygfsteel.com/BlueDavy/archive/2005/05/26/5236.htmlhttp://www.aygfsteel.com/BlueDavy/comments/5236.htmlhttp://www.aygfsteel.com/BlueDavy/archive/2005/05/26/5236.html#Feedback1http://www.aygfsteel.com/BlueDavy/comments/commentRss/5236.htmlhttp://www.aygfsteel.com/BlueDavy/services/trackbacks/5236.html我是q么想的Q?BR>


可快速开发一个插Ӟ量的对现有系l的侵入。在此^C可快速的q行插g的开发,量减少对于pȝ的R入,有良好的开发向导和开?/SPAN>IDE?/SPAN>

可轻杄q行插g的部|Ӏ当开发完毕一个插仉要部|至q_上时Q此步骤应尽量的单?/SPAN>

单的调用其他插g。对于^C其他可用的插件的调用应尽可能的依赖ƈ保持插g的独立性?/SPAN>

单的被调用。其他插件或应用需要调用时应可单的被调用?/SPAN>

可进行测试、调试。可q行单元试、调试,使得开发时更加的简ѝ?/SPAN>

可被扩展。插件可被扩展,方便来可对此插件进行功能上的完善和改进?/SPAN>

可分布式的部|Ԍq支持多U方式调?/SPAN>(Webservice?/SPAN>JMS)。得插件可部v在远端,实现分布式的物理l构?/SPAN>

可自动的升。插件可自动的升U,减小对于插g的维护ƈ保证插g功能的最新?/SPAN>

可被理Q安装、卸载、启用和暂停使用。得用户可Ҏ件进行选择性的配置?/SPAN>

插g异常的管理。保证插件在产生M异常的情况下均可对其q行捕捉q友好的提示用户?/SPAN>

插g日志。在插g的用过E中记录下够的日志Q方便将来对于插件的分析?/SPAN>

    产生的数据可被其他插件用。在插g中生的信息数据可被׃nQ得各插g产生的数据可共同构成pȝ的信?BR>    |络Q信息得以被׃n?/SPAN>


BlueDavy 2005-05-26 21:43 发表评论
]]>
关于Plugin Framework的关键因?/title><link>http://www.aygfsteel.com/BlueDavy/archive/2005/05/25/5187.html</link><dc:creator>BlueDavy</dc:creator><author>BlueDavy</author><pubDate>Wed, 25 May 2005 07:42:00 GMT</pubDate><guid>http://www.aygfsteel.com/BlueDavy/archive/2005/05/25/5187.html</guid><wfw:comment>http://www.aygfsteel.com/BlueDavy/comments/5187.html</wfw:comment><comments>http://www.aygfsteel.com/BlueDavy/archive/2005/05/25/5187.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/BlueDavy/comments/commentRss/5187.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/BlueDavy/services/trackbacks/5187.html</trackback:ping><description><![CDATA[<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin System</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">现在的流行程度已l勿庸置疑了Q在</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">N</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">多的白皮书、解x案中都可以看到即插即用这L词语Q而市Z面向构g、插件的软g也是来多Q其实插件式的组装系l或者说</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">?/SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">搭积?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">?/SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">式的l装pȝ一直就是Y件界的追求,但对?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin System</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">q是有些qh的地方,q望大家一赯论,</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">^_^</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">Q目前的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin Framework</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">基本都是一U?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Kernel+Core Plugins</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">l成的结构体p,说出来就?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">all are plugins</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">Q?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">^_^</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">Q典型的如</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Eclipse</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">Q其?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Maven</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">也算的上?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1">         </SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">通常一?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin Framework</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的职责就是:</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: Arial"><SPAN style="mso-list: Ignore">1?SPAN style="FONT: 7pt 'Times New Roman'">   </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">搜烦相应目录Qƈ目录下可作?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的部分注册到</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin Framework</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: Arial"><SPAN style="mso-list: Ignore">2?SPAN style="FONT: 7pt 'Times New Roman'">   </SPAN></SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">提供外部调用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的方?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: Arial"><SPAN style="mso-list: Ignore">3?SPAN style="FONT: 7pt 'Times New Roman'">   </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">之间怺交互的方?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: Arial"><SPAN style="mso-list: Ignore">4?SPAN style="FONT: 7pt 'Times New Roman'">   </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的加载,Ҏ其描q构建相应的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">ClassLoader<o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo2; tab-stops: list 39.0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: Arial"><SPAN style="mso-list: Ignore">5?SPAN style="FONT: 7pt 'Times New Roman'">   </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的编写说?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">当然Q一个好?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin Framework</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">应该q提?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">开发向|</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">开发、调试、部|的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">IDE</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">{等</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><SPAN style="mso-tab-count: 1">         </SPAN></SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">主要希望׃面几Ҏq行讨论Q呵呵,当然Q大家也可以增加一些大家认为值得讨论的部分:</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: Arial"><SPAN style="mso-list: Ignore">1?SPAN style="FONT: 7pt 'Times New Roman'">   </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的编?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">你构思中一个好?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin System</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">会要?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">如何~写Q我考虑中一个好?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin System</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">没有M~码上的要求Q要求的只是其描q文件的~写?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: Arial"><SPAN style="mso-list: Ignore">2?SPAN style="FONT: 7pt 'Times New Roman'">   </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的部|?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的部|Ԍ如何更加方便的去部v一?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">Q就?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Osgi</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">可以通过|络讉K{等Q考虑中根据配|从相应的目录或|站搜烦</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">q注册到pȝ?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: Arial"><SPAN style="mso-list: Ignore">3?SPAN style="FONT: 7pt 'Times New Roman'">   </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的调?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">对于</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的调用,Ҏ</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的描q采取相应的方式调用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">Q例?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">webservice</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">方式?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">socket</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">方式{等</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: Arial"><SPAN style="mso-list: Ignore">4?SPAN style="FONT: 7pt 'Times New Roman'">   </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的交?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">对于</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的交互,也许可以参?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Maven</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的方式,比如需要调用其他的</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">Q则采用cMq样的配|或调用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><attain plugin=”pluginname?function=”sendmail?><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">抑或采用</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">IoC</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">容器注入依赖Q?</SPAN><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: Arial"><SPAN style="mso-list: Ignore">5?SPAN style="FONT: 7pt 'Times New Roman'">   </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的扩?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt"><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">对于</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的扩展,q个</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Eclipse</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的扩展点完全值得参?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-list: l1 level1 lfo1; tab-stops: list 39.0pt"><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: Arial"><SPAN style="mso-list: Ignore">6?SPAN style="FONT: 7pt 'Times New Roman'">   </SPAN></SPAN></SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的依赖关pȝ分析</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><o:p></o:p></SPAN></P><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">         q是我构思中的一个东西,希望pȝ所有的模块都基于此</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Plugin Framework</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Q然后我们可以根据这些模?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Plugin</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">来分析整个系l?BR>         中各模块的依赖关pȝ{,q进行监控,甚至在将来可以图形化的进行配|,囑Ş化搭U木式的搭徏自己的系l,</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">^_^<BR><BR><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">也希望能听到大家关于</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Plugin Framework</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">技术方面的更多东西Q例如采?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Osgi</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">实现</SPAN><SPAN lang=EN-US style="FONT-SIZE: 9pt; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Plugin Framework</SPAN><SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">的实现思\{等</SPAN></SPAN><img src ="http://www.aygfsteel.com/BlueDavy/aggbug/5187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/BlueDavy/" target="_blank">BlueDavy</a> 2005-05-25 15:42 <a href="http://www.aygfsteel.com/BlueDavy/archive/2005/05/25/5187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ϳ</a>| <a href="http://" target="_blank">Ԫı</a>| <a href="http://" target="_blank">Ұ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̩</a>| <a href="http://" target="_blank">ǰ</a>| <a href="http://" target="_blank">۳</a>| <a href="http://" target="_blank">ղ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Է</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯʨ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƴ</a>| <a href="http://" target="_blank">᯹</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">֥</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ݳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƺ</a>| <a href="http://" target="_blank">ױ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˼</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ̨</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>