Dubbo SPI 使用方法(三)- 扩展点自动装配

开篇

前面已经讲到了:

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).

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot使用“习惯优于配置”的理念让我们的项目快速运行起来,我们可以不用或者只需要很少的配置就能创建一个独立运行、准生产级别的基于Spring框架的项目。我们不禁要问,这么一个优秀的框架,是不是在企业开发中就已经足够了,如果是,那么为什么像BAT这些大公司还要研发自己的交易框架,当然这里面除了核心技术之外,还有两个比较重要的原因:第一:像Spring ,Spring Boot这些开源框架固然很优秀,但却不满足这些大公司对框架的功能要求,如spring scheduler就没有分布式调度能力,阿里研发了自己的tbschedule,以及后来的schedulerx;第二:开源框架可以解决具体的领域问题,比如持久化框架Mybatis,RPC框架Dubbo,但是面对业务流程的开发却不是它的强项,以此就诞生了SSM,以及后来的Spring MVC。放眼整个java开源世界,不管是功能问题还是业务流程开发问题都有对应框架和组件能满足我们的需求,只要我们的视野足够开阔,能有效的去整合开源组件,足以应付日常的开发。当然我们很难写出像Spring、Spring Boot、Mybatis这些优秀的框架,但是我们可以在这个基础之上,进行整合,甚至二次开发,形成公司自己的功能组件或者交易开发框架。不客气的说,开源框架的底层少不了spring的身影,那么可以肯定在Spring Boot推出以后,开源框架势必会以Spring Boot作为底层平台进行二次改造,这是趋势,也是必然。本课程顺应潮流,以Spring Boot作为基础平台,充分发挥其特性,抽象业务流程,整合开源组件,降低开发难度,打造出一个功能强大的交易开发框架,简洁,优雅,好用。本课程有如下技术特色:第一:充分使用Spring Boot的自动装配、条件注解,以及各种使用技巧;第二:使用注解@Transaction抽象业务流程,简化交易的定义和执行方式,比SpringMVC更符合业务流程的开发(当然SpringMVC很强大,无贬低之意)第:为使交易具备RPC能力,使用泛化方式集成Dubbo,其好处是服务端不再需要提供接口给客户端使用,简单、高效;第四:使用nacos作为服务注册中心,也支持zookeeper;第五:为使交易具备Http能力,在Spring MVC的基础上提供HandlerMapping、HandlerAdapter。。。。一切尽在代码中

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值