java SPI 与cooma(dubbo 微容器改良品)--2 之Cooma SPI
来源:互联网 发布:广东英特讯软件科技 编辑:程序博客网 时间:2024/06/05 13:25
java SPI 与cooma(dubbo 微容器改良品)--2 之Cooma SPI
Cooma是一个极简、灵活的开源Java微容器(microcontainer)实现,其实现源于dubbo的spi(它来源于java spi)。
让我们看一下简单的demo:
概念:Extension Point,扩展点,要扩展的接口。提倡面向接口的编程,这些接口定义就变成了扩展点,凡是我们要扩展的实现,或者可由第三方扩展和替换组件件实现的接口定义,都可称之为扩展点。
package com.doctor.spi.service;import com.alibaba.cooma.Extension;/** * @author sdcuike * * Created on 2016年7月24日 下午10:21:37 * * Extension Point,扩展点,要扩展的接口。提倡面向接口的编程,这些接口定义就变成了扩展点。 */@Extensionpublic interface Car { void run();}
概念:扩展,即扩展点的实现。一般框架提供几种扩展即接口的实现,并且我们可以自由扩展或替换框架的实现(dubbo很熟悉的话,这点会体会深刻)。
package com.doctor.spi.service.impl;import com.doctor.spi.service.Car;/** * @author sdcuike * * Created on 2016年7月24日 下午10:22:28 * * Extension,扩展,即扩展点的实现 */public class RacingCar implements Car { @Override public void run() { System.out.println("RacingCar Running..."); }}
package com.doctor.spi.service.impl;import com.doctor.spi.service.Car;/** * * @author sdcuike * * Created on 2016年7月24日 下午10:23:11 * * Extension,扩展,即扩展点的实现 */public class SportCar implements Car { @Override public void run() { System.out.println("SportCar Running..."); }}
扩展点配置文件:在类路径的META-INF/extensions/添加文件 com.alibaba.demo.cooma.Car:
内容:
racingCar=com.doctor.spi.service.impl.RacingCarsportCar=com.doctor.spi.service.impl.SportCar
其实,我们可以把它看作spring的xml配置文件,这些文件定义了bean的name和class属性,目的是为了反射实例化,并且根据name依赖注入。
注:pom文件中添加依赖:
<dependency><groupId>com.alibaba</groupId><artifactId>cooma</artifactId><version>0.4.0</version></dependency>
并添加作者的仓库地址:
<repository><id>metaframe-repository</id><name>Metaframe Repository</name><url>http://metaframe.github.com/repo</url></repository>
main方法:
package com.doctor.spi;import com.alibaba.cooma.ExtensionLoader;import com.doctor.spi.service.Car;/** * Cooma SPI Demo * * @author sdcuike * * Created on 2016年7月25日 下午10:11:49 * * @see https://github.com/alibaba/cooma/wiki */public class CoomaDemo { public static void main(String[] args) { // ExtensionLoader维护扩展点实现实例的 单例,即getExtension方法对于同一个扩展点实现名返回的实例是同一个。 // 是不是和spring容器中by name获取容器中的bean实例差不多。 // 这个使用方式可以通过扩展点实现名获得 单个接口的指定实现。 ExtensionLoader<Car> extensionLoader = ExtensionLoader.getExtensionLoader(Car.class); Car racingCar = extensionLoader.getExtension("racingCar"); racingCar.run(); Car sportCar = extensionLoader.getExtension("sportCar"); sportCar.run(); }}运行结果:
RacingCar Running...SportCar Running...
是不是有点类似spring手动实例化容器,按name获取bean实例的思路。
待续。。依赖注入如何实现。。。
1 0
- java SPI 与cooma(dubbo 微容器改良品)--2 之Cooma SPI
- java SPI 与cooma(dubbo 微容器改良品)--1
- java spi与dubbo spi区别
- java spi与dubbo spi区别
- dubbo之SPI解析
- Dubbo-SPI
- dubbo源码之SPI注解
- 跟我学Dubbo系列之Java SPI机制简介
- 跟我学Dubbo系列之Java SPI机制简介
- Dubbo源码解析-Dubbo微内核实现(SPI扩展)
- dubbo源码学习(二)基础知识:JAVA SPI
- (未完成)Dubbo源码分析(七):Dubbo内核实现之基于SPI思想Dubbo内核实现
- Dubbo内核实现之SPI简单
- Java和dubbo中的SPI机制学习
- dubbo spi--实现细节
- dubbo SPI机制
- dubbo spi原理解析
- dubbo基于spi扩展
- 传统定时器技术
- 新站的SEO应如何操作?
- POJ 2234 Matches Game
- JavaScript 中apply()、call()和bind()方法的使用
- Mybatis中的#与$的区别
- java SPI 与cooma(dubbo 微容器改良品)--2 之Cooma SPI
- Opencv指针
- opencv人脸识别2
- lintcode minimum-adjustment-cost 最小调整代价
- Android 自定义属性
- Apache图片防盗链
- Cookie解析
- 图片旋转(扫描,等待效果)的几种方式
- STL学习