博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1:dubbo集成spring
阅读量:6224 次
发布时间:2019-06-21

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

hot3.png

#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
extends ReferenceConfig
implements FactoryBean, ApplicationContextAware, InitializingBean, DisposableBean

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

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

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

Boolean b = isInit();    if (b == null && getConsumer() != null) {        b = getConsumer().isInit();    }    if (b != null && b.booleanValue()) {        getObject();    }

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

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

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

public void setApplicationContext(ApplicationContext applicationContext) {		this.applicationContext = applicationContext;		SpringExtensionFactory.addApplicationContext(applicationContext);		if (applicationContext != null) {		    SPRING_CONTEXT = applicationContext;		    try {	            Method method = applicationContext.getClass().getMethod("addApplicationListener", new Class
[]{ApplicationListener.class}); // 兼容Spring2.0.1 method.invoke(applicationContext, new Object[] {this}); supportedApplicationListener = true; } catch (Throwable t) { if (applicationContext instanceof AbstractApplicationContext) { try { Method method = AbstractApplicationContext.class.getDeclaredMethod("addListener", new Class
[]{ApplicationListener.class}); // 兼容Spring2.0.1 if (! method.isAccessible()) { method.setAccessible(true); } method.invoke(applicationContext, new Object[] {this}); supportedApplicationListener = true; } catch (Throwable t2) { } } } } }

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

if (! isDelay()) {            export();        }

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

转载于:https://my.oschina.net/u/1269959/blog/735464

你可能感兴趣的文章
简明Linux命令行笔记:tail
查看>>
简明Linux命令行笔记:umask
查看>>
验证用户必选CheckBox控件
查看>>
紧跟时代步伐,让我们拥抱MVC 3
查看>>
RubyMine 5 RC 发布,新特性一览
查看>>
云计算里AWS和Azure的探究(4)
查看>>
大年初二帝都紫竹院散步
查看>>
java向图片上写字,两个图片合并的方法
查看>>
C#winform
查看>>
Script:10g中不用EM显示Active Session Count by Wait Class
查看>>
I Think I Need a Houseboat(计算几何,水题)
查看>>
纸上谈兵: 伸展树 (splay tree)
查看>>
[C语言] 文件操作,解压SZB格式中的一段函数片段;
查看>>
hdu 4531(模拟+BFS+DFS)
查看>>
slice的cap存在的原因
查看>>
java Dom(xml序列化及CUP)
查看>>
[Linux] 批量把不规则的Android应用程序命名为[中文_版本号](在无中文名称时命名为英文)...
查看>>
jquery div弹出层方式,显示页面内容
查看>>
函数式编程学习之路(10)
查看>>
TextView --- 内容设置成上下滑动 和 代码设置字体颜色
查看>>