使用工具编程的确能给人们带来很多便利,但是在不会用之前,且缺乏相应的中文资料让你去了解时,真是一种折磨,同时也是一种挑战。

bndTools其实就是用来开发OSGi的一个工具,它为开发提供了便利,具体是哪些便利,在在这里就不细说了。

花了一个星期,终于把bndtools的程序和逻辑整理清楚,不想说太多细节,先看整体框架。

bndtools主要分为三部分:

1.api,也就是提供服务的一个接口(我们可以把它理解为菜单)

2.impl,对接口的具体实现(可以指菜单上具体某个菜的做法,人家在后厨已经做好了)

3.command,也就是用具体命令调用此服务(可以理解为客户点菜)

了解了这三部分之后我们就可以写程序了:

1.在eclipse上安装bndTools

2.写一个api程序,我写的是com.example.api

package com.example.api;

/**
* @author Joye Luo
*/
public interface Greeting {
public String sayHello(String name);
}

在bnd.bnd文件中把它添加为导出包,因为等下写其它bundle的时候会需要依赖它,这其实就是OSGi的一个模块化机制,实现了低耦合。

3.写一个实现程序,我写的是com.example.impls

package com.example.impls;

import org.osgi.service.component.annotations.*;

import com.example.api.Greeting;

/**
* @author Joye Luo
*/
@Component
public class GreetingImpl implements Greeting {
@Override
public String sayHello(String name) {
return "Hello " +name;
}
}

@Component注释可以提供注册服务的功能,因为在这里依赖了api,所以要在它的bnd.bnd文件Build Path中加上com.example.api这个包

4.写一个command程序,让它调用这个服务,我把它放在com.example.impls下的com.example.impls.command包下,其实也可以另起一个程序,我比较懒。

import org.apache.felix.service.command.CommandProcessor;

import com.example.api.Greeting;

import aQute.bnd.annotation.component.Component;
import aQute.bnd.annotation.component.Reference; /**
* @author Joye Luo
*/
@Component(properties={
CommandProcessor.COMMAND_SCOPE+":String=example",
CommandProcessor.COMMAND_FUNCTION+":String=greet"
},
provide=Object.class)
public class Command {
private Greeting greeting; public void greet(String name){
System.out.println("return:"+greeting.sayHello(name));
} @Reference
public void setUserService(Greeting greeeting){
this.greeting = greeeting;
} }

这就会出现一个问题,在一个目录结构下,怎么让它打包出两个jar包出来,右键->new->bnd descriptor file,为这两个包配置两个不同的bnd文件就好啦。

4.最后一步就是运行它啦,随便建一个项目,我建的是com.example.client,new->bndrun file,把你要运行的bundle都添加进去,点Run OSGi,就可以打开Console了,输入命令:greet joye(随便其他什么字符串都可以)

可以看到输出为Hello joye

所有功能都完成啦,是不是很简答呢,接下来,show u the code

https://github.com/JoyeLuo/osgi-example

bndtools教程的更多相关文章

  1. Liferay7 BPM门户开发之38: OSGi模块化Bndtools、Maven、Gradle开发构建入门

    前言 OSGi是目前动态模块系统的事实上的工业标准,它适用于任何需要模块化.面向服务.面向组件的应用程序.Eclipse如此庞大和复杂的插件体系,就是基于OSGi.Liferay也是基于OSGi.OS ...

  2. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  3. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  4. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  5. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

  6. Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境

    一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...

  7. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  8. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  9. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

随机推荐

  1. Sharepoint 高级筛选

    先看看效果吧.............. 默认情况下:不做任何筛选. 添加一个筛选条件: 条件:如果是int类型那么可以有> < = 等 如果是string的话那么就没有这么多条件,当然这 ...

  2. CSS之上边栏

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. 经典算法系列--kmp

    前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k:但是问题在于如何求出这个最大前后缀长度呢?我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破,后来翻看算法导 ...

  4. 页面多语系自动切换-.resx

    实现这个需要应用到微软提供的本地资源文件Resources,实际上就是一种key  value的形式. 语言自动切换原理有两种 读取浏览器的语言首选项 根据IP网段进行识别.比如有的人通过VPN连接到 ...

  5. 网站整站变灰的方法(不支持IE10)

    html { -ms-filter: grayscale(100%); -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); - ...

  6. highcharts 图表库的简单使用

    Highcharts简介: Highcharts是一款纯javascript编写的图表库,能够很简单便捷的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.曲线图.面积图 ...

  7. 【学习笔记】【C语言】算术运算

    C语言一共有34种运算符,包括了常见的加减乘除运算 1. 加法运算+ 除开能做加法运算,还能表示正号:+5.+90 2. 减法运算- 除开能做减法运算,还能表示符号:-10.-29 3. 乘法运算* ...

  8. 跟着上一个tcpServer 一起来的

    具体功能就是通过反射为实体类赋值 public class httpParse<T> where T : new()    {        /// <summary>     ...

  9. Ubuntu上OpenStack DashBoard主题修改的方案

    最近终于把OpenStack的整个初步环境安装部署并配置成功,后续工作就是安装一些可选项了,如Cinder.Swift部件了.我们的整个项目采用的颜色方案主要为清淡色系,蓝色为主,可OpenStack ...

  10. Spring IoC容器的设计——BeanFactory应用场景2

    1.BeanFactory接口设计了getBean方法,这个方法是使用IoC容器API的主要方法,通过这个方法,可以取得IoC容器中管理的Bean,Bean的取得是通过指定名字来索引的. 2.如果需要 ...