java编程开发环境下的模块化编程架构


[日期:2019-05-29 05:40]   来源:未知    阅读:

随着互联网的不断发展,微服务和模块化编程开发被众多程序员所掌握。今天我们就一起来了解一下,在java编程开发环境下的模块化编程开发都有哪些常用架构类型。

java编程开发环境下的模块化编程架构

OSGi适用场景

很多人错误的使用了OSGi,套用了OSGi架构把系统复杂化。在我看来,OSGi的用处在于“模块化”和“热插拔”。模块化包括模块化、版本化和面向服务的设计。热插拔也就是说模块/bundle的热插拔,它可以实现更新和升级模块/bundle(即系统的一部分)而无需重启整个系统。

如果你的系统套用了OSGi架构,bundle的相互依赖关系复杂,又没有bundle动态加载、动态更新、动态卸载和动态监听的机制,都是静态启动所有bundle,那就是为了OSGi架构而OSGi架构,把问题复杂化了。其代价也是很大的,因为原来你的jar包用maven来处理依赖关系和自动更新也很方便,而由于整个系统建立在OSGi规范上,你的应用所依赖的其他组件也“不得不”迁移到OSGI上来,再加上OSGI独特的ClassLoader设计,使bundle间的类互相访问受到一定的约束,一切都需要迁移到OSGi的约束上来。

举个例子来说,就像Eclipse提供了动态加载、更新和删除插件的机制,因为它里面有一个插件注册和反注册的接口和插件加载、更新和删除的监听线程,这样允许你动态加载、更新和删除Eclipse插件而无需重启Eclipse。当然,如果你当前进程调用了某插件,比如js语法高亮,而某插件更新了,那么当前的js实例还是需要重新打开的。但整个Eclispe无需重启。

Java模块化的难点

OSGi的一个重要特性就是模块化,OSGi提供了一套模块化的体系,这其中则会有明确的模块之间接口暴露以及依赖的定义,因此能够更好的实现高内聚和低耦合。那么,Java模块化难点在哪?模块的实现和传统的编程方法确实有一些差别,主要体现在模块之间类访问的隔离、版本选择这两个方面。如希望更好的设计模块化的系统,开发者需要掌握ClassLoader机制、模块之间类的交互方法(这包括了模块怎么样对外提供可访问的package、怎么样访问其他模块提供的package、如何选择适合版本的package等)。如果不懂以上这些,贸然套用OSGi框架会误入歧途。

重要概念:Bundle

Bundle—AbundleisaJARfilewithspecialOSGientriesinitsmanifestandcontainingclasses,resources,andotherJARs。Bundle,可以将其理解为自描述的JAR文件。Bundle在OSGi中是部署的小单位,因此,可以把它理解为模块。在bundle的manifest文件中,会有对本bundle的标识、提供的功能(Export-package)及依赖性(Import-Package/Require-Bundle)的定义。每个bundle在运行时自己的类加载器(ClassLoader),这样可以做到一方面把不同的bundle里面的类区别开来,当bundle被卸载时,只有这个bundle的类加载器中的信息会丢失;另一方面,可以在自己的bundle内部充分利用Java的成员访问控制机制。

【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!


友情链接: