DubboSPI使用方法(三)扩展点自动装配
开篇
前面已经讲到了:
Dubbo SPI 使用方法(一)- 扩展点自动包装
Dubbo SPI 使用方法(二)- 扩展点自适应
本文来讲下 Dubbo SPI - 扩展点自动装配, 即 Dubbo 实现的 IOC , 用一段简单代码来解释下:
当实例化 A 时, 发现 A 依赖了 B, 并且有对应的 set 注入方法, 那么 Dubbo 就会顺便把 B 也实例化, 并注入到 A 对象中.
public class A { private B b;
public void setB(B b) {
this.b = b;
}
}
正文
1. 概念
上面简单的介绍了 IOC, 那么接下来看看 Dubbo SPI - 扩展点自动装配是如何做的.
引用官网的一段介绍
加载扩展点时,自动注入依赖的扩展点。
加载扩展点时,扩展点实现类的成员如果为其它扩展点类型,ExtensionLoader 在会自动注入依赖的扩展点。
ExtensionLoader 通过扫描扩展点实现类的所有 setter 方法来判定其成员。即 ExtensionLoader 会执行扩展点的拼装操作。
2. 使用
2.1 定义扩展接口
interface ServiceA { void sayA();
}
2.2 定义扩展接口实现类
// 实现类public class ServiceAImpl implements ServiceA {
private ServiceB serviceB;
public void setB(ServiceB serviceB) {
this.serviceB = serviceB;
}
public void sayA() {
System.out.println("service A")
serviceB.sayB();
}
}
// 需要注入的类
public class ServiceB {
public void sayB(){
System.out.println("service B")
}
}
2.3 MATA-INF/dubbo/com.nimo.spi.IA
serviceA=com.nimo.spi.ServiceAImpl
2.4 启动函数
ExtensionLoader<ServiceA> extensionLoader = ExtensionLoader.getExtensionLoader(ServiceA.class);
ServiceA serviceA = extensionLoader.getExtension("serviceA");
serviceA.sayA();
2.5 运行结果
打印如下:
service Aservice B
总结
Dubbo SPI - 扩展点自动装配(Dubbo IOC), 实现了类似 Spring IOC 的功能, 也就是在加载扩展实现类 (比如 ServiceA) 时, 如果检测到该类依赖了其他类 (ServiceB), Dubbo 就会把依赖类进行实例化, 并且通过 set 方法注入到该对象中(ServiceA).
以上是 DubboSPI使用方法(三)扩展点自动装配 的全部内容, 来源链接: utcz.com/z/514841.html