首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OSGI:是否可以使用Import-package并添加可见性:= reexport?

OSGI(Open Service Gateway Initiative)是一种动态模块化系统,用于构建和管理Java应用程序的组件化架构。它提供了一种模块化的方式来管理应用程序的各个部分,使得应用程序可以更加灵活、可扩展和可维护。

在OSGI中,可以使用Import-package指令来声明模块对其他模块的依赖关系。通过使用Import-package指令,模块可以引用其他模块提供的类和接口。而可见性:= reexport则是一个可选的指令,用于指定是否将依赖的包重新导出给其他模块使用。

在OSGI中,如果一个模块依赖于另一个模块的某个包,并且希望将这个包重新导出给其他模块使用,可以使用Import-package并添加可见性:= reexport。这样,其他模块就可以通过依赖该模块来访问和使用这个包中的类和接口。

然而,需要注意的是,使用可见性:= reexport可能会导致模块之间的依赖关系变得复杂,增加了模块之间的耦合性。因此,在使用可见性:= reexport时需要谨慎考虑,并确保模块之间的依赖关系清晰明确。

对于OSGI的应用场景,它广泛应用于需要动态加载和卸载模块的系统,例如插件化应用程序、服务化架构等。通过使用OSGI,可以实现模块的热部署、动态扩展和版本管理,提高系统的灵活性和可维护性。

腾讯云提供了一系列与云计算相关的产品和服务,其中包括云服务器、云数据库、云存储等。具体关于腾讯云的OSGI相关产品和产品介绍链接地址,可以参考腾讯云官方网站或联系腾讯云客服获取更详细的信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

大厂常问到的14个Java面试题

1. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义 都是重入锁 不同点 实现机制不同 synchronized通过java对象头锁标记和Monitor...reentrantlock通过ASQ的volatile state保证包含共享变量的多线程内存可见性 使用方式不同 synchronized可以修饰实例方法(锁住实例对象)、静态方法(锁住类对象)、代码块...不同应用使用不同的 webapp类加载器,实现应用隔离的效果,webapp类加载器下面是jsp类加载器 不同应用共享的jar包可以放到Shared类加载器/shared目录下。...osgi类加载模型是网状的,可以在模块(Bundle)间互相委托 osgi实现模块化热部署的关键是自定义类加载器机制的实现,每个Bundle都有一个自己的类加载器,当需要更换一个Bundle时,就把Bundle...*开头的类委派给父类加载器加载 2)否则,将委派列表名单(配置文件org.osgi.framework.bootdelegation中定义)内的类委派给父类加载器加载 3)否则,检查是否Import-Package

54420

JAVA后端面试100 Q&A之第一篇

1. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义 都是重入锁 不同点 实现机制不同 synchronized通过java对象头锁标记和Monitor...reentrantlock通过ASQ的volatile state保证包含共享变量的多线程内存可见性 使用方式不同 synchronized可以修饰实例方法(锁住实例对象)、静态方法(锁住类对象)、代码块...不同应用使用不同的 webapp类加载器,实现应用隔离的效果,webapp类加载器下面是jsp类加载器 不同应用共享的jar包可以放到Shared类加载器/shared目录下 5. osgi类加载机制...osgi类加载模型是网状的,可以在模块(Bundle)间互相委托 osgi实现模块化热部署的关键是自定义类加载器机制的实现,每个Bundle都有一个自己的类加载器,当需要更换一个Bundle时,就把Bundle...*开头的类委派给父类加载器加载 2)否则,将委派列表名单(配置文件org.osgi.framework.bootdelegation中定义)内的类委派给父类加载器加载 3)否则,检查是否Import-Package

51610
  • 一线互联网常见的 14 个 Java 面试题,你颤抖了吗程序员

    1. synchronized 和 reentrantlock 异同 相同点 都实现了多线程同步和内存可见性语义 都是重入锁 不同点 实现机制不同 synchronized 通过 java 对象头锁标记和...reentrantlock 通过 ASQ 的 volatile state 保证包含共享变量的多线程内存可见性 使用方式不同 synchronized 可以修饰实例方法(锁住实例对象)、静态方法(锁住类对象...不同应用使用不同的 webapp 类加载器,实现应用隔离的效果,webapp 类加载器下面是 jsp 类加载器 不同应用共享的 jar 包可以放到 Shared 类加载器 /shared 目录下 5....osgi 类加载模型是网状的,可以在模块(Bundle)间互相委托 osgi 实现模块化热部署的关键是自定义类加载器机制的实现,每个 Bundle 都有一个自己的类加载器,当需要更换一个 Bundle...(配置文件 org.osgi.framework.bootdelegation 中定义)内的类委派给父类加载器加载 3)否则,检查是否Import-Package 中声明,如果是,则委派给 Export

    64540

    一线互联网常见的 14 个 Java 面试题,你颤抖了吗程序员

    1. synchronized 和 reentrantlock 异同 相同点 都实现了多线程同步和内存可见性语义 都是重入锁 不同点 实现机制不同 synchronized 通过 java 对象头锁标记和...reentrantlock 通过 ASQ 的 volatile state 保证包含共享变量的多线程内存可见性 使用方式不同 synchronized 可以修饰实例方法(锁住实例对象)、静态方法(锁住类对象...jsp 类加载器 不同应用共享的 jar 包可以放到 Shared 类加载器 /shared 目录下 5. osgi 类加载机制 osgi 类加载模型是网状的,可以在模块(Bundle)间互相委托...)内的类委派给父类加载器加载 3)否则,检查是否Import-Package 中声明,如果是,则委派给 Export 这个类的 Bundle 的类加载器加载 4)否则,检查是否在 Require-Bundle...中声明,如果是,则将类加载请求委托给 required bundle 的类加载器 5)否则,查找当前 Bundle 的 ClassPath,使用自己的类加载器加载 6)否则,查找类是否在自己的 Fragment

    43930

    灵活的类加载器OSGI

    但是一个Bundle可以声明它所依赖的Package(通 过Import-Package描述),也可以声明它允许导出发布的Package(通过Export-Package描述)。...在OSGi 里面,Bundle之间的依赖关系从传统的上层模块依赖底层模块转变为平级模块之间的依赖,而且类库的可见性能得到非常精确的控制,一个模块里只有被Export过的Package才可能被外界访问,其他的...说人话就是OSGI框架,可以对需要加载的类进行精细化的控制,形成一个网状结构,而不是之前的树形的结构。...,可以只停用、重新安装然后启用程序的其中一部分,这对大型软件、企业级程序开发来说是一个非常有诱惑力的特性,譬如Eclipse中安装、卸载、更新插件而不需要重启动,就使用到了这种特性。...否则,查找当前Bundle的Classpath,使用自己的类加载器加载。 否则,查找是否在自己的Fragment Bundle中,如果是则委派给Fragment Bundle的类加载器加载。

    67330

    插件式开发架构综述

    借助于市场上各领域开发人员,在某一款软件(开源or商业)上进行面向新领域的开发,可以大大提高该产品的市场占有率,衍生出一系列各领域的代理商及咨询业务。 2....支持事件分发(已定义标准事件清单),插件可以接收事件,开发自定义的事件处理程序 用户在实际设计过程中针对模型、针对工程目录、针对绘图区域的操作,会分发到所有的插件中,类似于广播。...OSGI框架定义了大量的OSGI通用服务:日志、配置管理,XML解析等通用服务。 4.2 OSGI整体架构 4.2.1 模块层 模块层可以理解为开发出来的各类插件,一般以bundle的形式出现。...bundle 是开发、部署 OSGi 应用的基本单元。 bundle 的核心是 META-NF 目录下的 MANIFEST.MF 文件。 bundle 定义了内部包的对外可见性。...4.3.3 服务层 服务层可以理解为一个服务中心,每个插件将自己可以对外提供的功能通过服务层进行发布,给其他插件提供了服务发现的方式及服务访问。

    3.1K20

    OSGi 基本原理

    为了最小化耦合度和促使这些耦合度管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方。...OSGi联盟已经开发了例如像HTTP服务器、配置、日志、安全、用户管理、XML等很多公共功能标准组件接口。这些组件的兼容性插件实现可以从进行了不同优化和使用代价的不同计算机服务提供商得到。...模块层 模块层是 OSGi 框架中最基础的部分。 OSGi 的模块化,是通过为 Jar 包添加metadata 来定义哪些类该暴露,哪些类该隐藏,其控制单元叫做 Bundle(jar 包)。...但是要真正使用 Bundle,需要使用生命周期层的API,来和OSGi框架的生命周期层进行交互。 在标准的Java编程中,可以通过将jar包放到classpath中来使用它。...代码中的参数new LSE()是一个POJO,这个对象不需要实现任何OSGi类型或者使用标注,只要满足服务约定(这里就是接口)就可以了。

    3.1K90

    OSGI MANIFEST.MF详解

    MANIFEST.MF 文件存储的实际上是 Bundle 的元数据,可以定义 Bundle 的各种特征,同时能更好的对 Bundle 进行标识同时帮助用户对Bundle进行理解。...的R3规范 2:OSGI的R4/R5规范 Bundle-Name bundle名称 Bundle-SymbolicName 唯一的bundle名称 相当于系统id。...singleton表示是否使用单启动方式 Bundle-Version bundle版本号 Bundle-Activator Activator类路径 bundle启动和停止时,分别会加载该类的start...()和stop() Bundle-Vendor 发布商 Require-Bundle 依赖的其他bundle 一旦声明依赖某个bundle,意味着可以直接使用所有从这个bundle中导出的所有package...设置lazy标识延迟加载该bundle Export-Package 对外暴露的Package Import-Package 引用包的信息 只有引用了这些包,才能让classloader装载 Fragment-host

    14710

    动态库

    (otool -l) -> 修改成功后, 需要重新链接动态库 -> 再查看是否链接成功 最好是在生产动态库的时候, 路径就修改好 -> 改动态库的脚本 -> 最后链接生成动态库的时候 -> 添加参数-install_name...-file test -> r -> q 修改可执行文件的rpath路径 -> install_name_tool -rpath 当然也可以重新添加一个@...可执行文件为什么能够使用动态库 -> 因为动态库的暴露了自己的导出符号给可执行文件 但是最里层的动态库对于最外层的可执行文件,其导出符号是否暴露呢 查看最里层的导出符号表 -> objdump --...用于避免在真机开发过程中直接使用传统的dylib. 对于真机来说, 由于动态库都是在设备上, 在Xcode上使用基于tdb格式的伪framework可以大大减少Xcode的大小....动态库比静态库分发体积要小, 给别人提供SDK的时候,要考虑SDK的体积,虽然别人使用的时候会让别人的IPA包变大. 可以更好的控制动态库里面符号的可见性

    1.1K30

    JVM活学活用——类加载机制

    相对于类加载的其他阶段而言,加载阶段(准确地说,是加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,因为开发人员既可以使用系统提供的类加载器来完成加载,也可以自定义自己的类加载器来完成加载。   ...验证阶段大致会完成4个阶段 的检验工作: 文件格式验证:验证字节流是否符合Class文件格式的规范;例如:是否以0xCAFEBABE开头、主次版本号是否在当前虚拟机的处理范围之内、常量池中的常量是否有不被支持的类型...*开头的类),开发者可以直接使用扩展类加载器。...如果类或者资源所在的包是在Import-Package中指定的,或者是在此之前通过动态导入加载的了,那么将请求转发到导出bundle的类加载器,否则搜索继续进行下一步;如果该包在启动参数org.osgi.framework.system.packages.extra...如果包中类或者资源所在的包由bundle导出,或者包由bundle导入(使用Import-Package或者Require-Bundle),查找结束,即类或者资源没有找到。

    1K80

    月薪过万必会的:双亲委托模型

    如何判断类是否相同,可以使用Class对象的equals()方法、isAssignableFrom()方法、isInstance()方法的返回结果进行判断,也可以使用instanceof关键字进行对象所属关系的判断...它由sun.misc.Launcher.ExtClassLoader实现,开发者可以直接使用扩展类加载器。...它由sun.misc.Launcher.AppClassLoader来实现,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。...OSGi(开放服务网关协议) OSGi(Open Service Gateway Initiative,开放服务网关协议)技术是面向Java动态化模块化系统模型,程序模块(称为Bundle)无需重新引导可以被远程安装...*包,则将加载请求委托给父加载器 若类定义在启动委托列表(org.osgi.framework.bootdelegation)中,则将加载请求委托给父加载器 若类属于在Import-Package中定义的包

    24020

    JVM第八卷---类加载与执行子系统的案例与实战

    服务器应当保证两个应用程序的类库可以互相独立使用。 部署在同一台服务器上的两个 Web 应用程序所使用的 Java 类库可以实现相互共享。怎么刚说完隔离又说共享呢,其实这个也很常见。...但是一个 Bundle 可以声明他所依赖的 Java Package(通过 Import-Package 描述),也可以声明它允许导出发布的 Java Package(Export-Package)。...对于类库的可见性能够得到非常精确的控制,一个 Bundle 中只有被 Export 的 Package 才可能由外界访问。...引入 OSGi 的另一个重要理由是,基于 OSGi 的程序很可能(只是很可能,而不是一定会)可以实现模块级的热插拔功能。 OSGi 之所以能够有以上诱人的特点,要归功于它灵活的类加载器架构。...如果一个类存在 Bundle 的类库中,但是没有被 Export ,那么这个 Bundle 的类加载器可以找到这个类,但是不会提供给其他的 Bundle 使用,且 OSGi 平台也不会把其他 Bundle

    39620

    OpenDaylight开发学习十问十答

    如果我们的开发只是为了学习,建议使用ODL最新的正式发布版本,马上氮版本的SR1也要发布,可以用来学习。...还有就是需要了解一下OSGi规范,网上可以找到中文的规范,推荐4.0以后的版本。同时了解一下Karaf,看看OSGi规范和karaf之间的关系,这个过程可能也会花费一两个星期。...另外新手经常碰到的编译问题就是依赖问题,依赖找不到的问题检查一下依赖的坐标,检查下配置的maven仓库里是否存在对应坐标的组件。...另外一个就是同样的服务接口,有多个实现,比如 大家可以看到以上同样的服务接口有两个实现,其区别是type不同,我们在使用上述服务接口时,可以通过在blueprint配置文件里获取服务时(reference...但是不代表不可以试用同步的方式,比如说业务逻辑比较简单的应用,不需要开一个线程消耗,使用同步的方式就可以实现了,但是如果是一个耗时的或者耗CPU的操作就需要异步的方式了,这个可以灵活应用。

    1K80

    SpringBoot 动态加载 Jar 包,玩转动态配置!

    Jar包是Java应用程序的基本构建单元,动态加载Jar包可以提高系统的灵活性和扩展性。 Spring Boot提供了一种简便的方式来集成动态加载Jar包,通过集成类加载器和第三方库来实现这一功能。...这种机制可以提高系统的灵活性和扩展性,允许在不重启应用程序的情况下,添加、更新或删除组件。 2....实现热插拔: 动态加载Jar包可以实现热插拔功能,允许在应用程序运行时添加、更新或删除组件,无需重启应用程序。...添加依赖 在项目的pom.xml文件中,添加第三方库的依赖。以下是一个使用osgi-resource-locator库来实现Jar包的动态加载的示例: <!...我们使用jar命令来创建Jar包,指定MainClass类的入口点。 3.

    67910

    为维护而设计:架构设计的首要原则

    从技术社区的文章上,我们可以看到大量的相关字典,诸如于“通过配置和定义进行扩展”,又或者是“业务流程”的扩展,还有各类的“插件 ”以及“扩展的点” 等等的话术。...在《领域驱动设计:软件核心复杂性应对之道》一书中,Eric Evans 根据在项目上的重构经验,给出了领域驱动设计的系统化方法,融合了一系列的领域特定相关的实践。...OSGi 模块化的回归测试 OSGi 是一个颇为有趣的模块化、插件化方案,Eclipse 是最具备知名度的一应用场景。...在扩展性上,OSGi 有非常多的优点:诸如于动态加载、更新和卸载模块而不用停止服务,可以实现系统的模块化、版本化。 在微服务架构流行之前,它的插件化能力对于大型系统来说非常有吸引力。...我们可以在测试环境里,通过人工的方式,反复地、有预见性地对测试它们。在我们追求自动化和稳定性的今天,这种不稳定性变得异常的可怕。

    38830

    动态库详解

    (otool -l) -> 修改成功后, 需要重新链接动态库 -> 再查看是否链接成功 最好是在生产动态库的时候, 路径就修改好 -> 改动态库的脚本 -> 最后链接生成动态库的时候 -> 添加参数-install_name...-file test -> r -> q 修改可执行文件的rpath路径 -> install_name_tool -rpath 当然也可以重新添加一个@...可执行文件为什么能够使用动态库 -> 因为动态库的暴露了自己的导出符号给可执行文件 但是最里层的动态库对于最外层的可执行文件,其导出符号是否暴露呢 查看最里层的导出符号表 -> objdump --...相关的是 -reexport -lx 查看中间层的导出符号 -> nm -m 注意: 中间层的 -> LC_REEXPORT_DYLIB -> 通过改参数来链接最外层的可执行文件和最里层的动态库...用于避免在真机开发过程中直接使用传统的dylib. 对于真机来说, 由于动态库都是在设备上, 在Xcode上使用基于tdb格式的伪framework可以大大减少Xcode的大小.

    88620

    模块化服务规范——OSGI

    OSGi技术提供允许应用程序使用精炼、重用和协作的组件构建的标准化原语。这些组件能够组装进一个应用 和部署中。 OSGi亦称做Java语言的动态模块系统,它为模块化应用的开发定义了一个基础架构。...使用OSGI实现SOA 模块化设计是软件设计的一个基本思想,同时作为SOA应用,一个很重要的需求就是要方便用户扩展,利用扩展向SOA应用添加新功能,并能够很方便地和应用 本身做无缝集成。...这就要求SOA应用中的模块提供接入的扩展实现,还可以提供进一步扩展的能力。OSGi具备构造满足这样特点的SOA应用模块的能力。...OSGi提供了一个微内核的机制,实现了模块的插拔,并为模块定义了一个清晰的物理格式,保证了模块开发与复用的一致性。...但是具体在未来的发展中是否能够成为业界的标准有待验证。

    1.6K30
    领券