赞
踩
- package com.doctor.spi.service;
-
- import com.alibaba.cooma.Extension;
-
- /**
- * @author sdcuike
- *
- * Created on 2016年7月24日 下午10:21:37
- *
- * Extension Point,扩展点,要扩展的接口。提倡面向接口的编程,这些接口定义就变成了扩展点。
- */
-
- @Extension
- public interface Car {
- void run();
- }
- 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.RacingCar
- sportCar=com.doctor.spi.service.impl.SportCar
注: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...
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。