• 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
  • 相关阅读:
    JVM(十三)—— 执行引擎
    C++关系运算符重载
    实战!工作中常用的设计模式
    Python中ArcPy按照分幅条带与成像日期拼接每个8天间隔内的遥感影像
    Operating System Hands on Experiment-4
    文件真实类型识别 - linux c file
    【名人】王兴语录
    【每日一题】535. TinyURL 的加密与解密
    锐捷端口安全实验配置
    互联网大厂测开领域调研
  • 原文地址:https://blog.csdn.net/xiangbiao2009/article/details/132647129