1:dubbo集成spring

#dubbo 源码地址 ##查找解析类DubboBeanDefinitionParser dubbo通过spring提供的自定义namespace来解析自己定义的标签,读取META-INF/spring.handlers文件,找到对应的com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler,如下图。 DubboNamespaceHandler ##DubboBeanDefinitionParser解析类的作用 定义了每种标签的解析类com.alibaba.dubbo.config.spring.schema.DubboBeanDefinitionParser。 dubbo的每个标签都会解析成spring的org.springframework.beans.factory.support.RootBeanDefinition类。DubboBeanDefinitionParser解析类的操作就是把配置的属性,通过类的反射获取所有set方法,转换成属性,在通过反射设置对象的属性值。 ##初始化类

###消费者ReferenceBean

public class ReferenceBean<T> extends ReferenceConfig<T> implements FactoryBean, ApplicationContextAware, InitializingBean, DisposableBean 

1.FactoryBean 实现此接口必须实现getObject()方法,以下方法就是dubbo获取对象的自定义实现。

1 public Object getObject() throws Exception { 2 return get(); 3 }

2.InitializingBean 实现此接口必须实现afterPropertiesSet()方法,以下就是消费者在此方法中的部分实现。

1 Boolean b = isInit(); 2 if (b == null && getConsumer() != null) { 3 b = getConsumer().isInit(); 4 } 5 if (b != null && b.booleanValue()) { 6 getObject(); 7 }

以上代码直接调用了getObject()方法,也就是会调用get();也就是下面官方给出的流程图。 消费者初始化流程图 ###服务者ServiceBean

public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean, DisposableBean, ApplicationContextAware, ApplicationListener, BeanNameAware

1.ApplicationContextAware 实现此接口必须实现setApplicationContext(ApplicationContext applicationContext)方法,以下方法就是dubbo获取对象的自定义实现。

1 public void setApplicationContext(ApplicationContext applicationContext) { 2 this.applicationContext = applicationContext; 3 SpringExtensionFactory.addApplicationContext(applicationContext); 4 if (applicationContext != null) { 5 SPRING_CONTEXT = applicationContext; 6 try { 7 Method method = applicationContext.getClass().getMethod("addApplicationListener", new Class<?>[]{ApplicationListener.class}); // 兼容Spring2.0.1 8 method.invoke(applicationContext, new Object[] {this}); 9 supportedApplicationListener = true; 10 } catch (Throwable t) { 11 if (applicationContext instanceof AbstractApplicationContext) { 12 try { 13 Method method = AbstractApplicationContext.class.getDeclaredMethod("addListener", new Class<?>[]{ApplicationListener.class}); // 兼容Spring2.0.1 14 if (! method.isAccessible()) { 15 method.setAccessible(true); 16 } 17 method.invoke(applicationContext, new Object[] {this}); 18 supportedApplicationListener = true; 19 } catch (Throwable t2) { 20 } 21 } 22 } 23 } 24 }

2.InitializingBean 实现此接口必须实现afterPropertiesSet()方法,以下就是服务者在此方法中的部分实现。

1 if (! isDelay()) { 2 export(); 3 }

以上代码直接调用了export()方法,也就是下面官方给出的流程图。 服务者流程图 ###注解AnnotationBean 。。。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

KVM调整cpu和内存

一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid