3.MP3、Picture

先来看picture搜索实现.

pom中,打包规则可以继承自应用类bundle打包规则。除了打包规则,还需要加入spring的依赖和api包的依赖。

<dependency><groupId>org.springframework</groupId><artifactId>org.springframework.spring-library</artifactId><type>libd</type><version>3.5.0.RELEASE</version></dependency><dependency><groupId>org.phantom.demo</groupId><artifactId>org.phantom.demo.api</artifactId><version>1.0.0-SNAPSHOT</version></dependency>

添加完依赖,可以进行代码编写了.先来看PictureSearchBean,我们让picture对象拥有两个属性,图片标题和图片链接.类很简单,作为数据载体及bundle通讯时传递的实体对象.

package org.phantom.demo.search.picture;import org.phantom.demo.api.SearchBean;public class PictureSearchBean implements SearchBean {private String title;private String url;public PictureSearchBean() {}public PictureSearchBean(String title, String url) {this.title = title;this.url = url;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}}

接下来看picture搜索业务的实现代码,同样也很简单.我们为了简便,模拟一些本地数据,表明意思即可.

package org.phantom.demo.search.picture;import java.util.ArrayList;
import java.util.List;import org.phantom.demo.api.SearchBean;
import org.phantom.demo.api.SearchHandler;
import org.springframework.stereotype.Service;@Service("pictureSearch")
public class PictureSearchHandler implements SearchHandler {private static List<PictureSearchBean> beans = new ArrayList<PictureSearchBean>();static{beans.add(new PictureSearchBean("aaaaa", "aaaaaa"));beans.add(new PictureSearchBean("bbbbb", "vvvvvv"));beans.add(new PictureSearchBean("ccccc", "aaaaaa"));beans.add(new PictureSearchBean("daaddd", "aaaaaa"));beans.add(new PictureSearchBean("ddddd", "aaaaaa"));}public List<? extends SearchBean> doSearch(String key) {List<PictureSearchBean> temp = new ArrayList<PictureSearchBean>();for (PictureSearchBean b : beans) {if(b.getTitle().contains(key))temp.add(b);}return temp;}}

通过key遍历数据,找到符合要求的返回.一个很简单的service.接下来看如何将这个服务发布.再普通OSGI中,发布该服务也不是很难,编写几行代码就ok了.

bundleContext.registerService(SearchHandler.class,new PictureSearchHandler(),null);

在Virgo中(这里看作Spring-DM),其实也是这样注册的,只不过这行代码不需要你亲自写.把注册service的事情完全交给spring去做.第一步,将这个类发布成Spring bean.

@Service("pictureSearch")

然后,来看一下spring配置文件.META-INF/spring/applicationContext.xml(默认位置)

<?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:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:osgi="http://www.springframework.org/schema/osgi"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd"><context:component-scan  base-package="org.phantom.demo.search.picture"/><osgi:service ref="pictureSearch" interface="org.phantom.demo.api.SearchHandler"/></beans>

大致解释一下这个配置文件.将spring-osgi-schema导入

xmlns:osgi="http://www.springframework.org/schema/osgi"

然后打开注解扫描,将bean加入到spring的管理中,重点就是下面一句.

<osgi:service ref="pictureSearch" interface="org.phantom.demo.api.SearchHandler"/>

这样就将一个bean发布成OSGI的service了.osgi:service还有一些其他属性,这里不过多介绍.这篇文章的目的是向大家介绍我们在开发中如何使用Virgo,如何与Maven集成开发.其他的内容,我相信,当你看到这里的时候,肯定具有一定的学习能力.自己去查一下就OK.

再来看一下Picture的OSGI描述.

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: picutre search module
Bundle-SymbolicName: org.phantom.demo.search.picture
Bundle-Version: 1.0.0.SNAPSHOT
Excluded-Imports: org.phantom.demo.search.picture
Import-Template: org.springframework.*;version="[3.0.5,4)"
Import-Package: org.springframework.context.config;version="[3.0.5,4)",org.eclipse.gemini.blueprint.config;version="[1.0.0,2)"

我们template.mf中没有写任何api包的东西,但是它肯定是依赖api包的.这就交给bundlor插件去做吧,给我们节省一点时间.可以打开最后生成的MANIFEST.MF看一下

我们按照同样的方式,开发另一个实现.MP3

再贴一些关键代码和配置.其实基本和Picture一模一样.

package org.phantom.demo.search.mp3;import org.phantom.demo.api.SearchBean;public class Mp3SearchBean implements SearchBean{private String name;private String singer;public Mp3SearchBean() {}public Mp3SearchBean(String name, String singer) {this.name = name;this.singer = singer;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSinger() {return singer;}public void setSinger(String singer) {this.singer = singer;}
}
package org.phantom.demo.search.mp3;import java.util.ArrayList;
import java.util.List;import org.springframework.stereotype.Service;import org.phantom.demo.api.SearchBean;
import org.phantom.demo.api.SearchHandler;@Service("mp3Search")
public class Mp3SearchHandler implements SearchHandler{private static List<Mp3SearchBean> beans = new ArrayList<Mp3SearchBean>();static{beans.add(new Mp3SearchBean("aaaaa", "aaaaaa"));beans.add(new Mp3SearchBean("bbbbb", "vvvvvv"));beans.add(new Mp3SearchBean("ccccc", "aaaaaa"));beans.add(new Mp3SearchBean("daaddd", "aaaaaa"));beans.add(new Mp3SearchBean("ddddd", "aaaaaa"));}public List<? extends SearchBean> doSearch(String key) {List<Mp3SearchBean> temp = new ArrayList<Mp3SearchBean>();for (Mp3SearchBean b : beans) {if(b.getName().contains(key))temp.add(b);}return temp;}}
<?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:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:osgi="http://www.springframework.org/schema/osgi"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd"><context:component-scan  base-package="org.phantom.demo.search.mp3"/><osgi:service ref="mp3Search" interface="org.phantom.demo.api.SearchHandler"/></beans>
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: mp3 search module
Bundle-SymbolicName: org.phantom.demo.search.mp3
Bundle-Version: 1.0.0.SNAPSHOT
Excluded-Imports: org.phantom.demo.search.mp3
Import-Template: org.springframework.*;version="[3.0.5,4)"
Import-Package: org.springframework.context.config;version="[3.0.5,4)",org.eclipse.gemini.blueprint.config;version="[1.0.0,2)"

pom中加入spring和api的依赖即可.

转载于:https://my.oschina.net/u/725579/blog/529871

Virgo与Maven整合开发环境搭建(三)相关推荐

  1. Virgo与Maven整合开发环境搭建(一)

    OSGI的技术渐渐被采用到互联网应用的开发中.这里不讨论OSGI,即我们熟悉的Equinox,Felix是如何进.Java Web应用开发,这里讨论的是一个目前看来较新的方案--Eclipse Vir ...

  2. Virgo与Maven整合开发环境搭建(四)

    4.web 接下来是这次demo的另一个bundle.而且是个拥有spring-mvc能力的web-bundle(WAB).先来看一下结构 首先来看一下web.xml <?xml version ...

  3. Virgo与Maven整合开发环境搭建(二)

    二.开发集成. 配置好Maven和Virgo后,我们动手写一个demo.demo的场景是页面有一个搜索框,输入搜索条件,显示出匹配项.为了体现OSGI的特性,我们搜索内容分为图片和MP3两个bundl ...

  4. spark1.6 maven java_Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】...

    前言 本文旨在记录初学Spark时,根据官网快速入门中的一段Java代码,在Maven上建立应用程序并实现执行. 首先推荐一个很好的入门文档库,就是CSDN的Spark知识库,里面有很多spark的从 ...

  5. Linux开发环境搭建三 使用mount -t cifs 挂载windows共享目录方法与问题解决

    嵌入式开发通常是在linux环境下编译,windows下开发,这就需要在linux环境下访问windows目录了,或者在windows上访问linux目录.通常有三种方式 如果是在vm虚拟机上,vm提 ...

  6. IDEA Git Maven 基础开发环境搭建

    bin下修改 idea64.exe.vmoptions -Xms500m -Xmx1500m -XX:ReservedCodeCacheSize=500m idea只有Project(工程)和 Mod ...

  7. 【Flutter】Flutter 开发环境搭建 ( Android Studio 下 Flutter / Dart 插件安装 | Flutter SDK 安装 | 环境变量配置 | 开发环境检查 )

    文章目录 一.Flutter 学习资料 二.Flutter 开发环境搭建 三.Android Studio 环境安装 Flutter / Dart 插件 四.下载 Flutter SDK 五.设置 F ...

  8. 使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境

    做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框 ...

  9. Spring+Maven+Dubbo+MyBatis+Linner+Handlebars—Web开发环境搭建

    Spring+Maven+Dubbo+MyBatis+Linner+Handlebars                                         --Web开发环境搭建 本文主 ...

最新文章

  1. Angular2.0 基础: Form
  2. C#利用WebClient 两种方式下载文件(一)
  3. 华为荣耀v20是android10,荣耀V20和荣耀V10买哪个好
  4. 表数据库名_关系数据库理论:数据库的六大范式知识笔记
  5. 使用go语言解析xml
  6. 2017-9-19Linux基础知识(2)
  7. 华为交换机命令 简单配置DHCP
  8. 入门STM32--怎么学习STM32
  9. 携程2017 校招编程题
  10. 读书笔记:《置身事内》
  11. 机器学习sklearn-线性回归
  12. Android10的WIFI 名称读取为空解决
  13. 【前端学习路线】你一定需要掌握的热门前端技术栈
  14. 小魔推如何解决实体商家痛点,实现短视频高转化
  15. android 9.0 10.0 上报鼠标左键右键给app调用
  16. 【NanoPi T2】 7.uboot gmac网卡驱动(3) - 驱动源码解析
  17. 凸包问题-Graham-Scan算法-python实现
  18. layui框架学习(13:辅助元素)
  19. 亲测用APICloud打包vue项目
  20. SEED-XDS560Plus Emulator for CCS3.3.82.exe 在硬盘上都安装了什么?

热门文章

  1. 1734-AENTR/1734-AENT IP设置及在5000软件中组态方法
  2. 如何规划和管理自己的职业生涯?
  3. 【IoT】硬件产品设计:智能硬件产品开发时间表
  4. 阿里云性能真的是差到了极点……
  5. 遥志无盘如何设置副服务器,CCDisk遥志虚拟磁盘使用说明图解
  6. echarts 地图九状线显示钓鱼岛系列 (1) 之 3.0 与2.0区别
  7. 网文快捕保存网页并导出chm(360浏览器)
  8. 什么是Dos、DDoS?如何防范DDoS?
  9. Cannot parse date “2020-08-31 00:00:00“: while it seems to fit format ‘yyyy-MM-dd‘T‘HH:mm:ss.SSS
  10. 实现历史价格查询java_java – 从雅虎金融获得ISIN的历史价格