oldratlee edited this page Mar 8, 2013 · 46 revisions

Cooma是一个极简、灵活的开源Java微容器(microcontainer)实现。

概述

Cooma适用于为 框架扩展点(Extension)的加载和配置。

使用Cooma可以避免:

  • 自己写一个潦草的微容器:
    • 随着自身框架的发展,不断投入时间在微容器上增加新的常用功能,提高实现的强度。
    • 调整微容器,需要重构上层逻辑结构,无趣又容易出错。
  • 使用其它过于庞大的容器,比如Spring
    • 对于一个框架,尤其是一个小框架,不能大依赖
    • 框架对依赖引入要小,有利于自身简单易用。

Cooma的代码来源于Dubbo项目中被长时间使用和验证的实现。在极简的前提下,保证了功能成熟完备,可以应付框架的扩展需求。使用中有功能、使用方式等等问题,欢迎联系Cooma Team

实现原型来自于Service implementation of JDK5

参见Quick Start中的示例代码及其说明,快速了解。

概念上极简独立

  • 完全割除与容器不相关的概念。
  • 审视已有的概念,谨慎引入新概念。

实现上简单直白

  • 实现代码 少于1000行(不含代码注释)。
    使用sloccount统计0.2.1版本的实现代码是 780行
  • 保持代码可读性。
  • 不考虑没有实际应用的概念。
  • 谨慎对待性能优化;不能因此打乱代码的简单性。

集成上的简易灵活

  • 保持灵活的扩展性。
  • 开发者友好。
  • 集成是否简易是设计是否良好的有效指标。

功能

  • 以插件方式加载扩展
  • 支持依赖扩展点的自动加载(扩展的IOC)
  • 可以有扩展点Wrapper,为扩展写公共Filter代码(扩展的AOP)
  • 统一的配置方式来配置各级扩展点
  • 查询插件实现
  • 支持配置方式/编程方式

核心概念

  • Extension Point,扩展点,要扩展的接口
  • Extension,扩展,即扩展点的实现
  • Extension Instance,扩展实例,即扩展点实现类的实例
    # ExtensionLoader中维护了Extension Instance的 单例
  • Extension Adaptive Instance,扩展的自适应实例
  • Extension Wrapper,所有扩展点实现调用时都会先触发的执行

相关产品

更多内容参见:

项目起源

Dubbo项目中有一个微容器实现,这个微容器管理了Dubbo的各个扩展点(组件):

  • 初始化和持有扩展
  • 能够以插件的方式加载扩展,从而可以由第三方写组件的插件
  • 以简洁字符串的方式统一配置各级扩展
  • 依赖扩展的自动注入(IOC)
  • 可以为扩展写公共Filter代码(AOP)

但Dubbo的微容器实现耦合微容器之外RPC的概念,这样功能复杂显不清晰,这是代码的坏味道(bad smell)。所以把Dubbo的微容器的代码独立拿出来发展;另外拿出来后,可以独立改进,而不会有兼容Dubbo已有用法的历史包袱。

这个实现取名为Cooma。和Dubbo一样,Cooma也是一个澳大利亚地名,显示出和Dubbo的渊源关系;
另外,和“Container”一样,Cooma以“Co”开头,表示是一个容器,方便联想记忆。

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.