bndtools教程
使用工具编程的确能给人们带来很多便利,但是在不会用之前,且缺乏相应的中文资料让你去了解时,真是一种折磨,同时也是一种挑战。
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教程的更多相关文章
- Liferay7 BPM门户开发之38: OSGi模块化Bndtools、Maven、Gradle开发构建入门
前言 OSGi是目前动态模块系统的事实上的工业标准,它适用于任何需要模块化.面向服务.面向组件的应用程序.Eclipse如此庞大和复杂的插件体系,就是基于OSGi.Liferay也是基于OSGi.OS ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
- Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境
一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
- wepack+sass+vue 入门教程(二)
六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...
- wepack+sass+vue 入门教程(一)
一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...
随机推荐
- C# WinForm 调用WebService
在Winform中对数据库进行操作缺乏安全性,因而可以使用Winform调用WebService来实现对数据库的各种操作. 在VS2010中,创建一个Web服务程序,第一:创建一个空的Web应用程序, ...
- 关于async与await的FAQ 转
(译)关于async与await的FAQ 传送门:异步编程系列目录…… 环境:VS2012(尽管System.Threading.Tasks在.net4.0就引入,在.net4.5中为其增加了更丰富的 ...
- fitsSystemWindow作用
fitsSystemWindows layout属性 英文文档注释为: Boolean internal attribute to adjust view layout based on system ...
- 未能找到任何适合于指定的区域性或非特定区域性的资源。请确保在编译时已将“xxx.Resources.resources”正确嵌入或链接到程序集
今天在测试一个工程的时候,突然遇到了这样一个问题: 错误信息:System.Resources.MissingManifestResourceException: 未能找到任何适合于指定的区域或非特定 ...
- Zend studio 12.5.1安装aptana
aptana是zend studio的一个插件.解决zend对于前台html支持,加亮的问题. 安装方法其实很简单 ,直接给出aptana的地址了. http://download.aptana.co ...
- Codevs 2833 奇怪的梦境
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Aiden陷入了一个奇怪的梦境:他被困在一个小房子中,墙上有很多按钮,还 ...
- [Guava源码分析] Preconditions 前置条件
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3874170.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- VC和VS系列(2005)编译器对双精度浮点溢出的处理
作者:风影残烛 在还原代码的过程中.目前程序是采用VS2005(以上版本)写的. 我使用的是vc6.0,结果.在运算的时候.发现编译器对 // FpuTlxTest.cpp : 定义控制台应用程序的入 ...
- SQL语句执行顺寻
SQL语句执行的时候是有一定顺序的.理解这个顺序对SQL的使用和学习有很大的帮助. 1.from 先选择一个表,或者说源头,构成一个结果集. 2.where 然后用where对结果集进行筛选.筛选出需 ...
- C++与Java多态的区别
多态是指用父指针指向不同子类对象时,调用其共有的函数,不同的子类会有不同的行为.虽然C++和Java都具有多态机制,但是他们的实现不同,使用时的效果也会略有不同. 在C++中 普通函数调用:具体调用哪 ...