QQ浏览器5,以OSGI插件方式驱动?

接触OSGI是在Java上面,准确的说是通过Eclipse认识这个名词进而有一定的了解,并且也曾依葫芦画瓢在Eclipse插件框架上写一些类似Demo程序,记得好像是一个RSS阅读器吧。从此就知道扩展点,绑定,服务,接口等等,其实也没什么稀奇的,WordPress用的人应该很多,跟WordPress中的插件系统差不多了,系统只有两种行为,Add_Action,Do_Action,当然还有添加过滤的,就是些拦截类的操作,Add_Action就是在指定的扩展点ID上面挂接自己的功能模块,而Do_Action则是系统在运行的某一点上把加进来的这些扩展模块遍历,按照优先次序执行。现在很多系统都带有类似的插件系统,原理都差不多,尤其是一些可以反射的可以在虚拟机上运行的程序语言更容易实现。而OSGI正是这种插件机制的工业标准。

在C++语言中使用OSGI方式构建程序,目前为止只在QQ浏览器5中看到,哈哈,你可以看看Bin目录下面的两个DLL,OSGICommon,OSGIFrame,这是Bin目录FavBundle下面的两个文件Component.xml与MANIFEST.MF,是不是有熟悉的感觉:

 

<?xml version="1.0" encoding="UTF-8"?>
<component name="QQBrowser.Fav" >
	<implementation class="Com.Tencent.QBrowser.Fav" />
	<reference name="Store" interface="Service.Store" cardinality="1..1" />
	<service>
		<provide interface="Service.FavManager"/>
		<provide interface="eventhandler"/>
	</service>
	<property name="event.topics" value="osgi/qbrowser/environment/*"/>
</component>

 

Manifest-Version: 1.0
Bundle-ManifestVersion: 3
Bundle-Name: Fav
Bundle-SymbolicName: Fav
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: activator
Bundle-FileName:..\QBFav.dll
Bundle-StartLevel:2
Service-Component: Component.xml

Manifest-Version: 1.0
Bundle-ManifestVersion: 3
Bundle-Name: Fav
Bundle-SymbolicName: Fav
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: activator
Bundle-FileName:..\QBFav.dll
Bundle-StartLevel:2
Service-Component: Component.xml

 

 

posted on 2010-05-25 21:13  TinyMS  阅读(675)  评论(1)    收藏  举报

导航