甜腻的嘴角|Dubbo如何通过SPI提高框架的可扩展性?( 二 )
@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE})public @interface SPI {String value() default "";}@SPI标记接口是一个Dubbo SPI接口 , 即是一个扩展点 , value属性可以指定默认实现
Dubbo 并未使用 Java 原生的 SPI 机制 , 而是对其进行了增强 , 使其能够更好的满足需求 。 Dubbo SPI的优点如下
Dubbo SPI的实现步骤如下
Dubbo SPI 扩展点的特性自动包装扩展类的构造函数是一个扩展点 , 则认为这个类是一个Wrapper类 , 即AOP
用例子演示一下
@SPIpublic interface Car {void getBrand();}public class BenzCar implements Car {@Overridepublic void getBrand() {System.out.println("benz");}}public class CarWrapper implements Car {private Car car;public CarWrapper(Car car) {this.car = car;}@Overridepublic void getBrand() {System.out.println("start");car.getBrand();System.out.println("end");}}org.apache.dubbo.aop.Car内容如下(resources\META-INF\services目录下)
benz=org.apache.dubbo.aop.BenzCarorg.apache.dubbo.aop.CarWrapper测试类
public class DubboSpiAopDemo {public static void main(String[] args) {ExtensionLoaderBenzCar是一个扩展类 , CarWrapper是一个包装类 , 当获取BenzCar的时候实际获取的是被CarWrapper包装后的对象 , 类似代理模式
自动加载如果一个扩展类是另一个扩展类的成员变量 , 并且拥有set方法 , 框架会自动注入这个扩展点的实例 , 即IOC 。 先定义2个扩展点
org.apache.dubbo.ioc.Car(resources\META-INF\services目录下)
benz=org.apache.dubbo.ioc.BenzCarorg.apache.dubbo.ioc.Wheel(resources\META-INF\services目录下)
benz=org.apache.dubbo.ioc.BenzWheel@SPIpublic interface Wheel {void getBrandByUrl();}public class BenzWheel implements Wheel {@Overridepublic void getBrandByUrl() {System.out.println("benzWheel");}}@SPIpublic interface Car {void getBrandByUrl();}public class BenzCar implements Car {private Wheel wheel;public void setWheel(Wheel wheel) {this.wheel = wheel;}@Overridepublic void getBrandByUrl() {System.out.println("benzCar");wheel.getBrandByUrl();}}测试demo
public class DubboSpiIocDemo {public static void main(String[] args) {ExtensionLoader
推荐阅读
- 甜腻的嘴角|领空安全不容侵犯!俄战机向美军亮出导弹,几天后尴尬一幕发生
- 彩色科技|Dubbo自适应扩展机制
- 甜腻的嘴角|造芯有多耗电?台积电一年用143.3亿度电!台湾都要供不起了
- 甜腻的嘴角|华为Mate40稳了,麒麟9000备货1000万片,不愁断货
- 环球网|聊天记录撒娇卖萌超甜腻,男子没想到女朋友竟是“抠脚大汉”!
- 甜腻的嘴角|爷青结!腾讯微博将于9月28日停止服务和运营
- 甜腻的嘴角|九号B80电动自行车评测:2000元不到的出行神器?
- 甜腻的嘴角|手机即将“报废”的5个前兆,一旦出现赶紧换手机
- 第一财经|唯观纽约|若美股已陷于浪漫甜腻的“La La Land”,那美国经济基本面又是什么?
- 甜腻的嘴角|刚花2499买的新手机,有一点后悔了。
