Martin Fowler有一篇文章里称:说一个面向对象系统框架或结构是基于IoC的,就好像说汽车有四个轮子一样。非常精辟 ,IoC或者DI更多的是一个设计原则,一个设计良好的面向对象的系统或多或少都有这方面的特点,这与是否有一个IoC容器的关系不大,IoC容器的作用 是简化开发,强制系统遵循IoC原则而已。
OpenCore在最初设计的时候,没有考虑IoC容器的问题,主要是解决服务端的WEB开发、数据库访问、与REST远程通信等问题,我们完全使用 OSGi本身的服务注册机制,在插件启动时用代码实现依赖注射。直到今年8月份左右,我们把依赖注射的职责分离出来,在OSGi上实现了一个分级的IoC 容器,以简化开发,避免在插件启动类写依赖注射的代码。
OpenCore IoC容器有下面几个特性:
- 完全基于OSGi的插件体系结构。
- 简单,远没有Spring IoC容器复杂,支持属性注射(Property Injection)与构造函数注册(Constructor Injection)。
- 分级IoC容器,分为插件级、应用程序级、网络级
- IoC容器管理的服务与OSGi框架管理的服务可以互访,这样保证了OpenCore IoC不会屏蔽OSGi本身的模型,使得基于OpenCore IoC的插件与大量第三方基于完全基于OSGi服务模型的插件可以协作。
- 支持通过动态扩展点实现1对多的依赖注册机制。
OpenCore IoC的实现机制:
1. 每个插件(bundle)增加一个IoC的自描述文件META-INF/OPENCORE.XML,例如org.opengoss.web.core中,该文件的配置如下:
<plugin version="1.0" id="WebCore"></plugin>
xml 代码
- <plugin id="WebCore" version="1.0">
-
- <service id="WebServerConfiguration" scope="application" class="org.opengoss.web.internal.WebServerConfiguration">
-
- <interface name="org.opengoss.web.core.IWebServerConfiguration"/>
-
- </service>
-
- <service id="MarshallerRegistry" scope="application" class="org.opengoss.web.internal.MarshallerRegistry">
-
- <interface name="org.opengoss.web.service.IMarshallerRegistry"/>
-
- </service>
-
- <service id="WSContainer" scope="application" class="org.opengoss.web.internal.WSContainer">
-
- <interface name="org.opengoss.web.service.IWSContainer"/>
-
- <property name="marshallerRegistry" ref="MarshallerRegistry"/>
-
- </service>
-
- <service id="WSExporter" scope="application" class="org.opengoss.web.internal.WSExporter">
-
- <interface name="org.opengoss.web.service.IWSExporter"/>
-
- <constructor>
-
- <param ref="WSContainer"/>
-
- </constructor>
-
- </service>
-
- <extension-point id="Marshaller" target="MarshallerRegistry"
-
- bindMethod="addMarshaller" unbindMethod="removeMarshaller"/>
-
- <extension-point id="WebService" target="WSExporter"
-
- bindMethod="export" unbindMethod="unexport"/>
-
- <extension-point id="Class" target="MarshallerRegistry"
-
- bindMethod="addAliasClass" unbindMethod="removeAliasClass"/>
-
- </plugin>
2. 插件的激活类(Activator)不是直接实现OSGi本身的"BundleActivator"接口,而是继承由OpenCore提供的 "org.opengoss.core.PluginActivator",启动时,PluginActivator负责完成XML文件解析与依赖注射。 例如org.opengoss.web.core中的Activator代码如下:
java 代码
- import org.opengoss.core.IPluginContext;
- import org.opengoss.core.PluginActivator;
-
-
-
-
-
-
-
- public class Activator extends PluginActivator {
-
- @Override
- protected void startPlugin(IPluginContext pluginContext)
- throws Exception {
- }
-
- @Override
- protected void stopPlugin(IPluginContext pluginContext)
- throws Exception {
- }
-
- }
3. 我们注意到上的的服务配置中有"scope"的属性,该属性定义一个服务的使用范围,确定一个服务注册到哪一级IoC容器。
4. 另外一点,我们在IoC基础上增加了动态扩展点功能,实现多对1的注射。
OpenCore整个项目代码发布在www.sf.net/projects/opengoss与code.google.com/p/opengoss下。
分享到:
- 2007-01-05 21:49
- 浏览 5421
- 评论(2)
- 论坛回复 / 浏览 (2 / 7192)
- 查看更多
相关推荐
OSGi(Open Service Gateway Initiative)是一种基于Java的动态模块化框架,旨在解决Java EE开发及部署模型的局限性。该框架可以提供模块化、动态性和灵活性,解决研发、部署和维护等方面的挑战。 Java EE开发及...
综上所述,《未来10年:OSGi、Spring_DM》这本书不仅系统地阐述了OSGi及其在企业应用中的重要性,而且还提供了大量的实践案例,对于希望深入了解OSGi和SpringDM的开发者来说是一本不可多得的好书。
java源码:OSGi 分布式通讯组件 R-OSGi.jar
读书笔记:OSGI 实战 整合Maven 测试代码
赠送jar包:osgi-resource-locator-1.0.1.jar; 赠送原API文档:osgi-resource-locator-1.0.1-javadoc.jar; 赠送源代码:osgi-resource-locator-1.0.1-sources.jar; 赠送Maven依赖信息文件:osgi-resource-locator...
标题中的“WEB容器托管OSGi容器(轻量级集成方式)”是指在Web应用程序服务器(如Tomcat、Jetty等)中嵌入OSGi(Open Service Gateway Initiative)框架,实现服务组件的轻量化管理和部署。OSGi是一种动态模块化系统...
赠送jar包:osgi-resource-locator-1.0.1.jar; 赠送原API文档:osgi-resource-locator-1.0.1-javadoc.jar; 赠送源代码:osgi-resource-locator-1.0.1-sources.jar; 赠送Maven依赖信息文件:osgi-resource-locator...
1. **OSGi Service Platform**:OSGi(Open Services Gateway Initiative)服务平台是用于构建动态、模块化Java应用程序的一种框架。它允许在运行时安装、更新或卸载软件模块(称为bundles),而不会影响其他正在...
综上所述,OSGi Service Platform Core Specification 是理解 OSGi 框架和技术的基础,对于开发者来说,了解其核心概念和技术是非常重要的。通过遵循这些规范,可以构建出高度模块化、灵活且易于维护的应用程序。
OSGI(Open Services Gateway Initiative)是一种Java模块化系统,它允许开发者将应用程序分解为一系列可独立部署、更新和管理的模块。OSGI的核心是其服务导向架构,它为Java应用程序提供了一个动态、灵活的运行时...
osgi的jar包,第一次上传,有需要的可以自取,联网下载很慢,希望对你们有帮助,偶然间遇到了
标题 "org.osgi.core-4.2.0" 指的是一个特定版本的 OSGi(Open Services Gateway Initiative)核心框架库,版本号为 4.2.0。OSGi 是一个 Java 平台的模块化系统和服务平台,它提供了一种标准的方式来组织和管理 Java...
OSGi(Open Services Gateway Initiative)是一种Java模块化系统和动态服务平台,旨在解决Java应用程序的复杂性和可扩展性问题。这个规范允许开发者将应用程序分解为独立的模块,这些模块可以独立地安装、更新和卸载...
OSGi(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和可管理的Java应用程序。它的核心特性是基于服务的架构,允许动态发现、安装、卸载和升级软件组件,从而提高了灵活性和可维护性。OSGi技术...
OSGi(Open Services Gateway Initiative)是一种Java模块化系统和服务平台,它允许开发人员将应用程序分解为可独立更新和管理的模块。这个平台的核心是它的模块系统,也称为OSGi框架,它提供了一种动态、模块化的...
标题“wsc:基于 OSGI 的 WebService 容器”揭示了一个关键的技术概念,即在Java环境中使用OSGI(Open Service Gateway Initiative)框架来构建一个用于托管Web服务的容器。这个主题涉及了Java开发、OSGI模块化系统...
3. **远程服务**:如何利用OSGI实现远程服务调用,使服务能在不同OSGI容器间通信。 4. **开发工具与环境**:推荐的开发工具和IDE插件,以及如何设置和优化开发环境。 5. **性能优化**:针对OSGI环境的性能调优技巧...
Spring OSGi是Spring框架与OSGi(Open Service Gateway Initiative)规范相结合的一种技术,它允许在OSGi容器中运行和管理Spring应用。OSGi是一种模块化系统,为Java应用程序提供了动态部署、版本控制和依赖管理的...