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 A

service B

总结

Dubbo SPI - 扩展点自动装配(Dubbo IOC), 实现了类似 Spring IOC 的功能, 也就是在加载扩展实现类 (比如 ServiceA) 时, 如果检测到该类依赖了其他类 (ServiceB), Dubbo 就会把依赖类进行实例化, 并且通过 set 方法注入到该对象中(ServiceA).

以上是 DubboSPI使用方法(三)扩展点自动装配 的全部内容, 来源链接: utcz.com/z/514841.html

回到顶部