转自:http://blog.csdn.net/ferry_passion/article/details/7607402
Spring-OSGi默认加载解析META-INF/spring目录下的xml文件作为spring bean配置文件,也可通过在MANIFEST.MF中增加Spring-Context来指定spring bean配置文件。
把一个Spring bean发布为OSGi Service,只需在spring bean的xml中这么配置就行了:
<osgi:service id=”OSGi服务ID” ref=”需要发布为OSGi服务的spring bean” interface=”服务的接口”/>
要在Spring bean中引用OSGi Service,只需在spring bean的xml中这么配置:
<osgi:reference ref=”需要发布为OSGi服务的spring bean” interface=”服务接口” />
可以看出和ds中的配置基本是一致的,不过目前尚缺少对于policy这样的属性的配置,另外如要实现bind和unbind的设置,需要在osgi:reference的元素下增加osgi:listener的节点,例如:
<osgi:reference>
<osgi:listener ref=”引用了此service的spring bean”
bind-method=”服务可用时调用的方法”
unbind-method=”服务不可用时的调用的方法”/>
</osgi:reference>
这里bind-method和unbind-method的方法签名和在使用DS时稍有不同,这里bind-method和unbind-method的方法签名如下所示:
public void onBind(服务接口,Dictionary)
在上面ds的demo里把com.ferry.client bundle稍做改动,修改部分如下
增加一个类Tiny
- public class Tiny implements CommandProvider{
- private IAbility ability;
- public void setAbility(IAbility ability) {
- this.ability = ability;
- }
- public void onBind(IAbility ability,Map properties){
- this.ability = ability;
- }
- public void onUnbind(IAbility ability,Map properties){
- this.ability = null;
- }
- public void _countTinyDamage(CommandInterpreter ci){
- if(ability!=null){
- ci.println(ability.getName()+":"+ability.ability(4));
- }else {
- ci.println("ability is null!");
- }
- }
- @Override
- public String getHelp() {
- return "\tcountDamage - Count the damage\n";
- }
- }
对应的spring配置文件如下
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:osgi="http://www.springframework.org/schema/osgi"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/osgi
- http://www.springframework.org/schema/osgi/spring-osgi.xsd">
- <bean id="tiny" class="com.ferry.hero.Tiny">
- <property name="ability" ref="ability"/>
- </bean>
- <osgi:reference id="ability" interface="com.ferry.ability.IAbility">
- <osgi:listener ref="tiny" bind-method="onBind" unbind-method="onUnbind"></osgi:listener>
- </osgi:reference>
- <osgi:service ref="tiny" interface="org.eclipse.osgi.framework.console.CommandProvider">
- </osgi:service>
- </beans>
spring-dm也支持多服务提供,有list和set两种,配置如下
<osgi:list id="引用了此service的spring bean " interface="服务接口"/>
<osgi:setid="引用了此service的spring bean " interface="服务接口“/>
Hero改成spring-dm 多服务提供的list方式,代码如下
- public class Hero implements CommandProvider{
- private List<IAbility> abilityList;
- public void setAbilityList(List<IAbility> abilityList) {
- this.abilityList = abilityList;
- }
- public void addAbility(IAbility ability) {
- abilityList.add(ability);
- System.out.println(ability.getName());
- }
- public void removeAbility(IAbility ability) {
- abilityList.remove(ability);
- System.out.println(ability.getName());
- }
- public void _countDamage(CommandInterpreter ci){
- if (abilityList!=null&&abilityList.size()!=0) {
- for (IAbility ability : abilityList) {
- ci.println(ability.getName()+":"+ability.ability(4));
- }
- }
- }
- @Override
- public String getHelp() {
- return "\tcountDamage - Count the damage\n";
- }
- }
Hero对应的spring配置文件如下
- <bean id="hero" class="com.ferry.hero.Hero">
- <property name="abilityList" ref="abilitys"></property>
- </bean>
- <osgi:list id="abilitys" interface="com.ferry.ability.IAbility"></osgi:list>
- <osgi:service ref="hero" interface="org.eclipse.osgi.framework.console.CommandProvider">
- </osgi:service>
代码运行结果大家可以通过我提供的代码自己运行,这里就不截图了
用到的jar包
com.springsource.org.aopalliance-1.0.0.jar
jcl-over-slf4j-1.6.4.jar
logback-classic-1.0.0.jar
logback-core-1.0.0.jar
org.eclipse.equinox.ds_1.3.1.R37x_v20110701.jar
org.eclipse.equinox.util_1.0.300.v20110502.jar
org.eclipse.osgi.services_3.3.0.v20110513.jar
org.eclipse.osgi_3.7.2.v20120110-1415.jar
org.springframework.aop-2.5.6.SEC03.jar
org.springframework.beans-2.5.6.SEC03.jar
org.springframework.context-2.5.6.SEC03.jar
org.springframework.core-2.5.6.SEC03.jar
slf4j-api-1.6.4.jar
spring-osgi-core-1.2.1.jar
spring-osgi-extender-1.2.1.jar
spring-osgi-io-1.2.1.jar
spring-osgi-mock-1.2.1.jar
相关推荐
标签"osgi springDM"进一步明确了关键技术和关注点。Spring DM是Spring针对OSGi环境的一个扩展,它提供了在OSGi容器中管理和部署Spring应用的能力。然而,需要注意的是,Spring DM在Spring 3.0之后被弃用,取而代之...
标题 "SpringDM笔记31-Testing with OSGi and SpringDM" 涉及到的是在OSGi环境中使用SpringDM进行测试的相关知识。OSGi(Open Service Gateway Initiative)是一种Java模块化系统,允许动态地发现、加载和卸载服务。...
- 启动Eclipse IDE,选择一个用于存放项目的空文件夹作为工作空间,例如`C:\sample\springdm`。 - Eclipse 3.3版本内嵌了Equinox 3.3 OSGi容器,这为开发和调试OSGi模块提供了便利。 **4. 导入Spring DM JAR文件*...
**OSGI MAVEN SPRINGDM 文档集** 这个文档集主要涵盖了三个关键的Java开发技术:OSGI(Open Service Gateway Initiative)、Maven以及Spring Dynamic Modules(Spring DM)。这些技术都是现代Java开发中的重要组成...
### SpringDM与OSGI概述 #### OSGI概念解析 OSGI(Open Service Gateway Initiative),直译为“开放的服务网关初始化”,它是一系列针对Java动态化模块化系统的规范。OSGI不仅指代一个官方联盟,还代表着由该联盟...
【标题】:“基于Spring DM Server的OSGi实例” 在IT领域,OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务平台,它允许开发者创建可热插拔的组件,从而提高了软件的可维护性和可扩展性。...
SpringDM(Spring Dynamic Modules)是Spring框架的一个扩展,专门用于OSGi(Open Service Gateway Initiative)环境中的应用程序开发。OSGi是一种Java模块化系统,它允许开发者将应用程序拆分成独立的、可热插拔的...
标题 "OSGI+SpringDM+Hessian" 涉及到三个重要的技术概念,它们分别是OSGI(Open Services Gateway Initiative)、SpringDM(Spring Dynamic Modules)和Hessian。这些技术在Java开发领域中都有其独特的应用和价值。...
标题“spring-dm-osgi整合jar包”和描述“spring-dm整合osgi所需所有jar包”提及的核心知识点是Spring Dynamic Modules(简称Spring DM)与OSGi(Open Service Gateway Initiative)框架的集成。这两个技术在Java...
Spring-DM指的是 Spring ...Spring-DM 的主要目的是能够方便地将 Spring 框架和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环境中,利用OSGi框架提供的服务,将应用变得 更加模块化。
3. Spring-DM:Spring-DM 是 Spring 开发组织在 2008 年发布的,将 OSGi 和 Spring 结合的第一个版本。 4. dm Server:dm Server 是一个完全模块化部署的基于 OSGi 的 Java 服务器,为运行企业 Java 应用和 Spring ...
Spring DM,全称为Spring Dynamic Modules,是Spring框架的一个扩展,主要设计用于开发在OSGi(Open Service Gateway Initiative)环境下的应用程序。OSGi是一种模块化系统,允许Java应用程序以组件的形式进行构建、...
《SpringDM开发文档》是关于SpringDM框架的详细技术指南,该框架是在OSGi环境中运行Spring应用程序的关键组件。SpringDM,全称为Spring Dynamic Modules,是Spring框架针对OSGi(Open Service Gateway Initiative)...
标题中的"osgi_spring_dm_jr"可能是指OSGi(Open Service Gateway Initiative)框架下,Spring Dynamic Modules(Spring DM)的Java Runtime环境相关的知识。OSGi是一种模块化系统,用于构建可升级、可扩展和可配置...
未来10年:OSGi、Spring-DM OSGi(Open Service Gateway Initiative)是一种基于Java的动态模块化框架,旨在解决Java EE开发及部署模型的局限性。该框架可以提供模块化、动态性和灵活性,解决研发、部署和维护等...
Spring-DM(现在称为Spring OSGi)是Spring框架的一个扩展,旨在将Spring的功能与OSGi的模块化特性相结合,使开发者能够在OSGi环境中利用Spring的优势。 在本文中,作者通过一个简单的Web应用实例来展示如何利用...
Spring DM 1.1.x最大特性便...在多个Spring DM支持OSGi平台上运行)并且Spring DM Server并没有提供更多企业应用支持 不过对于刚 使用Spring DM进行WEB应用开发人来说成功地配置却不是件容易事,文档详细讲解了相关配置
Spring Dynamic Modules (Spring DM),作为Spring框架的扩展,旨在为OSGi环境下的应用开发提供强大的支持。它将Spring的依赖注入和面向切面编程能力与OSGi的模块化特性相结合,为开发者在构建动态、可扩展的企业级...