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 ...
随机推荐
- MVC datetime? & datetime 设置格式
设置datetime的格式,直接有方法重载进行,即使数据为datetime?格式 设置起始时间在配置的时候添加设置 $('#closeTime').datetimepicker({ language: ...
- 【.NET基础】--委托、事件、线程(3)
之前的两篇文章我们了解了委托和事件,本文我们看一下线程. 1,一个窗体程序,默认拥有一个线程(相当于一个商店里面,只有一个店员),这个默认的线程叫做 UI线程/主线程. 2,进程和线程的关系: A,进 ...
- 【转】用java实例学习MVC模式
.1 MVC模式 MVC是三个单词的缩写,这三个单词分别为:模型(Model).视图(View)和控制(Controller).MVC模式的目的就是实现Web系统的职能分工.下面以J2EE开发进行介绍 ...
- JavaEE是什么?
曾经有那么两次被问到JavaEE是什么东西.做了这么久的程序员了,这个概念还说不清楚,真的感觉有点惭愧呀. 下面摘抄网络上的一些概念,以悼念傻逼的自己. Java EE,Java平台企业版(Java ...
- windows Api AlphaBlend的使用方法
很早的时候公司里开发了个c++客户端软件,需要支持windows2000,要求简单小巧,并且不希望引入其他界面库,图形引擎之类的东西,像gdi+之类的,于是对于美工做出来的一些界面,需要有alpha通 ...
- RedHat Install
1. 插入光盘1并从光盘启动加载镜像文件 2. 回车后进入安装流程 3. 选择语言 4. 选择键盘布局 5. 鼠标配置 6. 选择安装类型 7. 选择分区类型 8. 添加一个boot分区 9. 新建一 ...
- 如何自学java迅速成为java高手
要想学好Java,首先要知道Java的大致分类.我们知道,自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ...
- c/c++面试总结(1)
最近在找新的工作,在找工作中遇到很多面试题,大多数让我很难堪,再次让我认识到自己的知识的匮乏,上份工作是以应届生的身份,所有当时进项目组也没有很多要求,进入项目组后自己还算好学(自己以为),之前也没有 ...
- VmodCam top verilog
`timescale 1ns / 1ps /////////////////////////////////////////////////////////////////////////////// ...
- jQuery滚动监听插件Waypoints
页面内滚动操作的导航插件Waypoints.它可以让你方便的处理页面滚动事件,你可以比较自由的在自己的UI中使用这个插件控制页面滚动事件. Waypoints根据用户滚动的位置来帮助开发者构建相关的设 ...