解析文件

AutoJsonRpcServiceImplExporter

JsonServiceExporter

AutoJsonRpcServiceImplExporter

路径:com.googlecode.jsonrpc4j.spring.AutoJsonRpcServiceImplExporter

AutoJsonRpcServiceImplExporter 是与spring 自动注册service启动类

实现 BeanFactoryPostProcessor 后置拦截器,具体了解可点击访问

postProcessBeanFactory() 是重载实现接口方法 也是该类入口;

public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

//扫描注解@JsonRpcService 的类

DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) beanFactory;

Map servicePathToBeanName = findServiceBeanDefinitions(defaultListableBeanFactory);

//循环注册Service,

for (Entry entry : servicePathToBeanName.entrySet()) {

registerServiceProxy(defaultListableBeanFactory, makeUrlPath(entry.getKey()), entry.getValue());

}

}

findServiceBeanDefinitions() 扫描注解@JsonRpcService 的类 形成 key-value 结果集 key 是jsonrpc注解值,value 是 servicebeanName名称. serviceBeanNames.put(path, beanName);

//TODO

registerServiceProxy(defaultListableBeanFactory, makeUrlPath(entry.getKey()), entry.getValue())

entry.getKey() 是jsonrpc注解值 entry.getValue() 是 servicebeanName名称

BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(JsonServiceExporter.class).addPropertyReference("service", serviceBeanName);

registerServiceProxy 方法内部做了一些属性注入

if (objectMapper != null) {

builder.addPropertyValue("objectMapper", objectMapper);

}

if (errorResolver != null) {

builder.addPropertyValue("errorResolver", errorResolver);

}

if (invocationListener != null) {

builder.addPropertyValue("invocationListener", invocationListener);

}

if (registerTraceInterceptor != null) {

builder.addPropertyValue("registerTraceInterceptor", registerTraceInterceptor);

}

if (httpStatusCodeProvider != null) {

builder.addPropertyValue("httpStatusCodeProvider", httpStatusCodeProvider);

}

if (convertedParameterTransformer != null) {

builder.addPropertyValue("convertedParameterTransformer", convertedParameterTransformer);

}

if (contentType != null) {

//设置response类型

builder.addPropertyValue("contentType", contentType);

}

builder.addPropertyValue("backwardsCompatible", backwardsCompatible);

builder.addPropertyValue("rethrowExceptions", rethrowExceptions);

builder.addPropertyValue("allowExtraParams", allowExtraParams);

builder.addPropertyValue("allowLessParams", allowLessParams);

builder.addPropertyValue("shouldLogInvocationErrors", shouldLogInvocationErrors);

defaultListableBeanFactory 是IOC始祖,提定义Bean注册监听;

defaultListableBeanFactory.registerBeanDefinition(servicePath, builder.getBeanDefinition());

JsonServiceExporter 实现HtttpHandler,最终容器注册是这个Bean的实例.

class JsonServiceExporter extends AbstractJsonServiceExporter implements HttpRequestHandler {

//jsonRpcServer 顶级实例

private JsonRpcServer jsonRpcServer;

/**

* {@inheritDoc}

*/

@Override

protected void exportService() {

jsonRpcServer = getJsonRpcServer();

}

/**

* {@inheritDoc}

*/

public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//核心方法执行入口

jsonRpcServer.handle(request, response);

response.getOutputStream().flush();

}

}

JsonRpcMultiServer

/**

* A multiple service dispatcher that supports JSON-RPC "method" names

* that use dot-notation to select a server endpoint. For example:

*

* {

* "jsonrpc": "2.0",

* "method": "service.method",

* "params": {"foo", "bar"},

* "id": 1

* }

*

* An example of using this class is:

*

* JsonRpcMultiServer rpcServer = new JsonRpcMultiServer();

* rpcServer.addService("Foo", new FooService())

* .addService("Bar", new BarService());

*

* A client can then call a test(String, String) method on the Foo service

* like this:

*

* {

* "jsonrpc": "2.0",

* "method": "Foo.test",

* "params": ["some", "thing"],

* "id": 1

* }

*

*/

转载至链接:https://my.oschina.net/guoenzhou/blog/1833075

jsonrpc4j android,jsonrpc-4j代码解析相关推荐

  1. android 事件分发 代码解析,Android事件分发之源码分析

    原文首发于微信公众号:躬行之,欢迎关注交流! 上篇文章中叙述了 Android 事件分发的大致流程,下面从 Activity.ViewGroup.View 三个方面介绍事件的相关方法,小节如下: Ac ...

  2. 【Android 逆向】使用 Python 代码解析 ELF 文件 ( PyCharm 中进行断点调试 | ELFFile 实例对象分析 )

    文章目录 一.PyCharm 中进行断点调试 二.ELFFile 实例对象分析 一.PyCharm 中进行断点调试 在上一篇博客 [Android 逆向]使用 Python 代码解析 ELF 文件 ( ...

  3. android 滑动拦截,Android 滑动拦截实例代码解析

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package demo.hq.com.fby; import android.content.Context; import android.u ...

  4. android签名校验代码,Android签名验证解析

    1.本文主要内容 知识回顾 签名验证解析 总结 本文介绍下Android在安装apk时,对签名的验证过程 2.知识回顾 在Android签名过程详解一文中,我已经详细说明签名的过程以及为什么要这么做, ...

  5. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  6. android之json解析优化,Android开发之json解析

    目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...

  7. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  8. Android init.rc文件解析过程详解(三)

    Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...

  9. Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  10. Android init.rc文件解析过程详解(一)

        Android init.rc文件解析过程详解(一) 一.init.rc文件结构介绍 init.rc文件基本组成单位是section, section分为三种类型,分别由三个关键字(所谓关键字 ...

最新文章

  1. 【经典C#.NET入门教程】管理软件开发必备知识免费视频教程下载
  2. Mybatis常见面试题(10个必备面试题)
  3. 人工神经网络_制作属于自己的人工神经网络
  4. html作业本,小鹅通作业本使用教程
  5. Mysql 异步复制
  6. 一行代码能做什么? 看到最后一个我终于忍不住...
  7. 有没有更好的写v =(v == 0?1:0)的方法; [关闭]
  8. IDEA 查看源码快捷键
  9. 图像频域增强:带通带阻滤波器
  10. vue: table制作发货单表格并打印
  11. 无法通过计算机名访问 win10,win10系统主机名无法访问局域网共享的恢复方法
  12. 平面设计完全手册_什么是平面设计,做平面设计都要了解哪些基础知识点?
  13. 会声会影批量处理素材设置教程
  14. 【两天搞定小米商城】【第三步】小米商城之导航部分
  15. 字节女测试工程师万字总结的软件测试入门技巧
  16. 获取字符串长度的几种办法
  17. 虚拟机服务器双通道和四通道,双通道和四通道区别
  18. 计算机sci期刊必需要提交原始数据,sci投稿的时候需要附上原始数据和处理过程么...
  19. 解决高德地图在线API不支持对应的方法回调返回结果的问题
  20. linux menuconfig搜索,Linux make menuconfig查找并快速跳转指定驱动选项

热门文章

  1. 如何设置eclipse眼睛保护色-码农必备
  2. 服务器显示A40故障码,求助大神,车子出现故障码,5053无法消除
  3. java从JDK里提取全球数据,包含国家(名称、二字代码、三字代码)、币种(名称和代码)、和语言种类的数据
  4. 中国省份区域json
  5. c语言12个实验报告,C语言实验报告合集
  6. 关于Dll、Com组件、托管dll和非托管dll
  7. 软件测试报告模板怎么写,这篇文章告诉你
  8. K歌、短视频技术最佳实践——“唱吧”音视频技术探索
  9. landsat8简介
  10. 一个完整的html代码是什么,html是什么?一个完整的html代码告诉你(完整实例版)...