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
浙公网安备 33010602011771号