博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dubbo整合spring源码解析
阅读量:2289 次
发布时间:2019-05-09

本文共 2570 字,大约阅读时间需要 8 分钟。

1@Service注解的实现流程

2@Reference注解的实现流程
    DemoService
    一个服务生成两个bean
    1)DemoServiceImpl  ---> demoServiceImplBean(普通)
    2)根据DemoServiceImpl上的@Service注解生成一个serviceBean,这个bean的ref属性指向demoServiceImpl这个bean。serviceBean还实现了ApplicationListener<ContenxtRefreshEvent>接口
    
    
    @EnableDubboConfig : -----> 解析配置-----> 生成不同的配置bean   ---->为每个bean注册一个空的BeanDefinition,为每个bean注册一个DubboConfigBindingBeanPostProcessor(从配置文件获取值设置到属性上)的bean后置处理器
        主要用来解析配置,properties文件中的配置
        1)根据配置生成bean
            dubbo.application ---> ApplicationConfig.class
            dubbo.module           ----> ModuleConfig.class
            dubbo.registry         ----> RegistryConfig.class
            dubbo.protocol         ----> ProtocolConfig.class
            dubbo.monitor          ----> MonitorConfig.class
            dubbo.provider         ----> ProvoderConfig.class
            dubbo.consumer         ----> ConsumerConfig.class
            dubbo.config-center    ----> ConfigCenterBean.class
            dubbo.metadata-report  ----> MetadataReportConfig.class
            dubbo.metrics          ----> MetricsConfig.class

        

            
            @EnableDubboConfigBinding
            
            multiple 为true或false的区别,名字的区别,根据multiple用来判断是否从配置项中获取beanName:如果multiple为false,则看有没有配置id属性,如果有,id属性就当做beanName,如果没有配置则自动生成一个beanName
    @DubboComponentScan        : 扫描服务提供者(@Service)和引用者(@Reference)
            @Import(@DubboConfigConfigurationRegistrar implements ImportBeanDefinitionRegistrar)
            DubboComponentScanRegistrar.registerBeanDefinitions(AnnotationMetadata am,BeanDefinitionRegistry bdr)
                1)拿到DubboComponentScan注解所定义的包路径,扫描该package下的类,识别这些类上的@Service和@Reference注解
                2)注册ServiceAnnotationBeanPostProcessor一个bean,实现了BeanDefinitionRegistryPostProcessor接口,所以在Spring启动时会调用postProcessBeanDefinitionRegistry,该方法会进行扫描,扫描@Service注解了的类,然后生成BeanDefinition(会生成两个,一个普通的bean,一个ServiceBean),在serviceBean中会监听ContextRefreshedEvent事件,一旦spring启动完后,就会进行服务导出
                    serviceBean的名称:ServiceBean+":"+接口全路径名
                    serviceBean的ref属性执行普通bean实例对象的名字
                    service注解配置的参数,会被设置到ServiceBean实例对象的属性中
                    每个serviceBean都会接收到spring启动后刷新事件
                3)注册ReferenceAnnotationBeanPostProcessor,实现了AnnotationBeanPostProcessor接口(),继而实现了InstantiationAwareBeanPostProcessorAdapter接口。所以spring在启动时,再对属性进行注入时会调用 AnnotationInjectedBeanPostProcessor 接口中的postProcessProperty,在这个过程中会按照@Reference注解的信息去生成一个ReferenceBean对象,设置给属性的不是ReferenceBean对象,而是ReferenceBean.get()得到的代理对象。
                    启动的时候,每个bean都会执行到AnnotationBeanPostProcessor接口中
                    查找的过程:
                        先查找使用了@Reference注解的字段,AnnotatedFieldElement
                        再查找使用了@Reference注解的方法
                        返回的是Dubbo定义的AnnotatedInjectionMetadata,接下来就会使用这个类去进行属性注入
                    @Reference标注字段的时候,如果同一个类中使用该注解标注了两个字段,得到的是两个不同的实例,因为没有缓存。
                    如何
                        得到引入服务的beanName
                        attributes里存的是@Reference注解中所配置的属性和值
                        injectedType表示引入的是哪个服务接口
                        referenceBeanName的值为:ServiceBean+":"+接口全路径名
                        referenceBeanName表示我现在引用的这个服务,它导出是对应的ServiceBean的beanName是什么,可以用来判断现在我引用的这个服务接口   
                        引入服务的入口:ReferenceConfig.get(){
                            init();//入口
                        }

转载地址:http://ddbnb.baihongyu.com/

你可能感兴趣的文章
[Java并发编程实战] 第7章 取消与关闭
查看>>
[Java并发编程实战] 第8章 线程池的使用
查看>>
[Java并发编程实战] 第9章 图形用户界面应用程序
查看>>
[Java并发编程实战] 第10章 避免活跃性危险
查看>>
[Java并发编程实战] 第11章 性能与可伸缩性
查看>>
[Java并发编程实战] 第12章 并发程序的测试
查看>>
[Java并发编程实战] 第13章 显式锁
查看>>
[Java并发编程实战] 第14章 构建自定义的同步工具
查看>>
[Java并发编程实战] 第15章 原子变量与非阻塞同步机制
查看>>
[高性能MySQL] 第1章 MySQL架构与历史
查看>>
[面试] 找实习面试时问到的跟项目、分布式和数据库有关的问题
查看>>
[Docker] 使用Docker-compose部署Neo4j
查看>>
[Neo4j] CQL命令
查看>>
[Neo4j] 添加算法插件包
查看>>
[Neo4j] Spring Boot项目访问Neo4j报错
查看>>
[Docker] 两份docker-compose.xml共用一个network
查看>>
数据总线和地址总线的纠葛
查看>>
iar注释快捷键
查看>>
ubuntu16.04 okular中文界面
查看>>
Intel Core系列CPU架构演变
查看>>