博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dubbo源码学习笔记----结合Spring
阅读量:7004 次
发布时间:2019-06-27

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

hot3.png

dubbo结合spring

public class ServiceBean
extends ServiceConfig
implements InitializingBean, DisposableBean, ApplicationContextAware, ApplicationListener
, BeanNameAware { private static final long serialVersionUID = 213195494150089726L; private static transient ApplicationContext SPRING_CONTEXT; private final transient Service service; private transient ApplicationContext applicationContext; private transient String beanName; private transient boolean supportedApplicationListener;

spring 容器中通过@PostConstruct和@PreDestroy可以对Bean进行初始化和销毁;或者通InitializingBean和DisposableBean实现对Bean的初始化和销毁。

InitializingBean

这说明在spring初始化bean的时候,如果bean实现了InitializingBean接口,会自动调用afterPropertiesSet方法。

public void afterPropertiesSet() throws Exception {        if (getProvider() == null) {

进行了以上各种Model,Config的初始化。

ApplicationListener

核心方法为:onApplicationEvent,监听所有发送到ApplicationContext中到Event。

public synchronized void export() {        if (provider != null) {            if (export == null) {                export = provider.getExport();            }            if (delay == null) {                delay = provider.getDelay();            }        }        if (export != null && !export) {            return;        }        if (delay != null && delay > 0) {            delayExportExecutor.schedule(new Runnable() {                public void run() {                    doExport();                }            }, delay, TimeUnit.MILLISECONDS);        } else {            doExport();        }    }

通过一个延迟线程池,对各种Config,Model进行初始化。

ApplicationContext

通过ApplicationContext可以获取Spring容器中的所有Bean,也可以通过setApplicationContext获取Spring上下文。

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}); // backward compatibility to spring 2.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}); // backward compatibility to spring 2.0.1 if (!method.isAccessible()) { method.setAccessible(true); } method.invoke(applicationContext, new Object[]{this}); supportedApplicationListener = true; } catch (Throwable t2) { } } } } }

转载于:https://my.oschina.net/u/1000241/blog/1606671

你可能感兴趣的文章
Linux常见的进程调度算法
查看>>
Redis need tcl 8.5 or newer
查看>>
系统思维\结构思维
查看>>
[日常] 编写HTTP接口文档
查看>>
Android App开发技能图谱(转载)
查看>>
【转】Kotlin 和 Checked Exception
查看>>
Java基础-二进制以及字符编码简介
查看>>
树莓派GPIO控制RGB彩色LED灯
查看>>
T-SQL基础查询——单表查询
查看>>
Android中经常使用的bitmap处理方法
查看>>
ffmpeg超详细综合教程——摄像头直播
查看>>
Python3在指定路径下递归定位文件中出现的字符串
查看>>
iterm2退出时保存会话状态,下次打开恢复
查看>>
关于UNPIVOT 操作符
查看>>
图片人脸检测——OpenCV版(二)
查看>>
java字符编码转换
查看>>
DPDK virtio-user
查看>>
mp3
查看>>
scrapy-redis介绍(一)
查看>>
微信公众平台开发概述
查看>>