OSGI:模块层

什么是模块化

    在计算机科学中模块化的概念是“将大型系统分为多个互相联系的逻辑单元,并强制设定各个模块的逻辑边界来改善系统的维护性和封装性”,也就是说模块将一些类封装在模块中,而将一些需要给外部使用的类暴露出来给外部使用

为什么要模块化

    大家可能认为Java中的OO思想不也提供了这种功能吗,为什么要使用OSGI的模块化了?Java的面向对象设计,的确实现了类似的功能,但是其本身是存在一定的缺陷的。首先大家看看下面的例子,其中有三个java文件:org.serc.helloworld.Hello.java:定义了一个接口

package org.serc.helloworld;  
public interface Hello {  
void sayHello();  
}

org.serc.helloworld.impl.HelloImpl.java:实现了Hello接口

package org.serc.helloworld.impl;

import org.serc.helloworld.Hello;

public class HelloImpl implements Hello{
final String helloString;

public HelloImpl(String helloString){
    this.helloString = helloString;
}

public void sayHello(){
    System.out.println(this.helloString);
}
}

org.serc.helloworld.main.Main.java    
package org.serc.helloworld.main;

import org.serc.helloworld.Hello;
import org.serc.helloworld.HelloImpl;

public class Main{
final String helloString;

public static void main(String[] args){
    Hello hello = new HelloImpl(“Hello,SERC!”);
    hello.sayHello();
}
    我们可以看出,在main方法中引用了Hello接口的sayHello方法,但是为了实例化这个接口却引进了HelloImpl这个类,这里明显破坏了封装性的特点,或者你会说可以使用工厂模式来改善这个问题,但是这又会花费多余的开销,而OSGI的模块化却能很好的解决这个问题。而且我们在java中的classpath添加类时,不能直观的看到导入jar包的版本和其所依赖的其他jar包。

OSGI模块层基础

    在OSGI的模块中回大量的创建和维护大量的Bundle。Bundle是以jar包形式存在的模块物理单元,包含了Class文件、资源文件和元数据(metadata);更好的理解是:在jar包中的MANIFEST中加入了对Bundle的特征之后,这个jar包就成为了Bundle。如图:

bundle

    Bundle中的元数据可以分为三个部分:

1 可读信息(可选):更好的理解Bundle

2 Bundle的标示符(必须):Bundle的唯一标识符

3 代码的可见性(必须):定义内部与外部代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值