• 4.0 Spring与Dubbo整合原理与源码分析


    #Dubbo#

    文章介绍

    1. Dubbo中propertie文件解析以及处理原理
    2. Dubbo中@Service注解解析以及处理原理
    3. Dubbo中@Reference注解解析以及处理原理

    1.0 整体架构和流程

    应用启动类与配置

    1. public class Application {
    2. public static void main(String[] args) throws Exception {
    3. AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ProviderConfiguration.class);
    4. context.start();
    5. System.in.read();
    6. }
    7. @Configuration
    8. @EnableDubbo(scanBasePackages = "org.apache.dubbo.demo.provider")
    9. @PropertySource("classpath:/spring/dubbo-provider.properties")
    10. static class ProviderConfiguration {
    11. }
    12. }

    应用配置类为ProviderConfiguration, 在配置上有两个比较重要的注解

    1. @PropertySource表示将dubbo-provider.properties中的配置项添加到Spring容器中,可以通过@Value的方式获取到配置项中的值
    2. @EnableDubbo(scanBasePackages = "org.apache.dubbo.demo.provider")表示对指定包下的类进行扫描,扫描@Service与@Reference注解,并且进行处理

    @EnableDubbo

    在EnableDubbo注解上,有另外两个注解,也是研究Dubbo最重要的两个注解

    1. @EnableDubboConfig
    2. @DubboComponentScan
    1. @Target({ElementType.TYPE})
    2. @Retention(RetentionPolicy.RUNTIME)
    3. @Inherited
    4. @Documented
    5. @Import(DubboConfigConfigurationRegistrar.class)
    6. public @interface EnableDubboConfig {
    7. boolean multiple() default true;
    8. }
    9. @Target(ElementType.TYPE)
    10. @Retention(RetentionPolicy.RUNTIME)
    11. @Documented
    12. @Import(DubboComponentScanRegistrar.class)
    13. public @interface DubboComponentScan {
    14. String[] value() default {};
    15. String[] basePackages() default {};
    16. Class[] basePackageClasses() default {};
    17. }

    注意两个注解中对应的@Import注解所导入的类:

    1. DubboConfigConfigurationRegistrar
    2. DubboComponentScanRegistrar

    Spring在启动时会解析这两个注解,并且执行对应的Registrar类中的registerBeanDefinitions方法(这是Spring中提供的扩展功能。)

    DubboConfigConfigurationRegistrar

    流程

    Spring启动时,会调用DubboConfigConfigurationRegistrar的registerBeanDefinitions方法,该方法是利用Spring中的AnnotatedBeanDefinitionReader来读取:

    1. DubboConfigConfiguration.Single.class
    2. DubboConfigConfiguration.Multiple.class

    这两个类上的注解。

    1. @EnableDubboConfigBindings({
    2. @EnableDubboConfigBinding(prefix = "dubbo.application", type = ApplicationConfig.class),
    3. @EnableDubboConfigBinding(prefix = "dubbo.module", type = ModuleConfig.class),
    4. @EnableDubboConfigBinding(prefix = "dubbo.registry", type = RegistryConfig.class),
    5. @EnableDubboConfigBinding(prefix = "dubbo.protocol", type = ProtocolC
  • 相关阅读:
    苹果酸-壳聚糖纳米孔水凝胶微球/SA/CS/GT三元复合/载血小板源性生长因子壳聚糖水凝胶微球
    spring框架源码十七、Bean对象创建子流程
    Kubernetes网络组件介绍
    高阶导数习题
    用Python做数据分析之数据处理及数据提取
    数据备份与恢复
    神经网络可以解决的问题,神经性修复治疗方法
    分组密码的模式
    SpringBoot项目中后来添加的.gitignore文件使其生效,删除远端原有的target等目录
    docker-compose 搭建laravel环境
  • 原文地址:https://blog.csdn.net/xiangbiao2009/article/details/132647129