OSGI 入门和整合Spring 概述 本文用于OSGI 基本入门,并添加对Spring 的整合,本文假设读者对Eclipse、OSGI,Spring 的概念和用法有基本了解,本文仅供参考,希望起到抛砖引玉的效果,希望对大家能有帮助,能节省一点查资料的时间就善莫大焉了。 若发现纰漏和疑问,望不吝指教—— E-Mail:Caichaowei@gmail.com。 感谢 Powerpiggy,Hypaspist 的指导和帮助。 蔡超伟 2008 年 4 月 一、创建提供服务的 OSGI Bu n dle 1. 创建一个 Plug-in 工程 2 . 填入工程名,如图选择 3. 直接下一步,然后点击 Finish,会显示如下图: 4. 选择Dependencies,添加 5. 点击 debug 的虫子图标,选择Open Debug Dialog… 出现下图界面后,保证在Workspace 中选择刚创建的bundle,在点击“Add Required Bundles”,确保如下3 个被选中: org.eclipse.osgi org.eclipse.osgi.services org.eclipse.equinox.ds 注意最后一个 org.eclipse.equinox.ds 需要手工指定,该包如果你的Eclipse 下没有则需要下载安装,只有具有该 jar 包才能从以配置文件的方式注册服务(见后述的service.xml 文件)。 6. 点击Debug 后在控制台显示 至此,一个最基本的Bundle 就完成了,但此时它还不能对外提供任何服务。 7. 创建一个接口 IDisplay,并且创建一个实现类 Display,实现其显示信息的方法setDescInfor,内容就是将传入的参数在控制台打印出来,项目结构如图: 文件内容如下: /** * IDisplay.java */ public class Display implements com.infotech.bpr.autodisplay.display.IDisplay { public void setDescInfor(String strInfor) { System.out.println(strInfor); } } /** * Display.java */ package com.infotech.bpr.autodisplay.display; import org.osgi.service.component.ComponentContext; public class Display implements com.infotech.bpr.autodisplay.display.IDisplay { public void setDescInfor(String strInfor) { System.out.println("显示:" +strInfor); } /* activate 方法会在Bundle 加载完毕后自动调用,deactivate 会在Bundle 卸载时自动调用。*/ protected void activate(ComponentContext context) { System.out.println("显示器激活"); } protected void deactivate(ComponentContext context) { System.out.println("显...