背景

  • 项目中不可避免的使用第三方api接口,但是如果使用apache-httpclient总是不可避免需要设置连接池等,即使每次拷贝对于项目来说也显得冗余
  • http-api-invoker的方式可以使用注解的方式,定义api接口

<!--变更http包依赖--><dependency><groupId>com.bj58.dadiyang</groupId><artifactId>http-api-invoker</artifactId><version>1.0.2</version><exclusions><exclusion><artifactId>fastjson</artifactId><groupId>com.alibaba</groupId></exclusion></exclusions></dependency>
  • @HttpApiScan({"com.bj58.xx.httpinvoker"}) 对于springboot项目需要在application类引入

@RetryPolicy
@HttpApi("${xxx}")
public interface ConfigSvcApi {@HttpReq(timeout = 10000,value = "/theme/saveThemeConfig", method = "POST")HttpApiResult<Void> saveThemeConfig(ThemeParam param);@HttpReq(timeout = 10000,value = "/theme/getThemeConfig")HttpApiResult<String> getThemeConfig(@Param("salesBspId") String salesBspId, @Param("configType") String configType);}

原理分析

@Documented
@Target({ElementType.TYPE})
@Import({HttpApiConfigurer.class})
@Retention(RetentionPolicy.RUNTIME)
public @interface HttpApiScan {String[] value() default {""};String[] configPaths() default {""};
}

1.HttpApiScan通过Import注解引入了HttpApiConfigurer 类

@Component
public class HttpApiConfigurer implements BeanDefinitionRegistryPostProcessor, ApplicationContextAware {private static final Logger logger = LoggerFactory.getLogger(HttpApiConfigurer.class);private static final String CLASSPATH_PRE = "classpath:";private static final String FILE_PRE = "file:";private ApplicationContext ctx;public HttpApiConfigurer() {}

2.HttpApiConfigurer实现了 BeanDefinitionRegistryPostProcessor, ApplicationContextAware 接口 ,会在spring ioc初始化的过程中调用,将通过注解引入的api定义成一个GenericBeanDefinition交给spring-ioc管理

http-invoker插件原理解析相关推荐

  1. MyBatis插件原理解析及自定义插件实践

    一.插件原理解析 首先,要搞清楚插件的作用.不管是我们自定义插件,还是用其他人开发好的第三方插件,插件都是对MyBatis的四大核心组件:Executor,StatementHandler,Param ...

  2. android黑科技系列——微信抢红包插件原理解析和开发实现

    一.前言 自从几年前微信添加抢红包的功能,微信的电商之旅算是正式开始正式火爆起来.但是作为Android开发者来说,我们在抢红包的同时意识到了很多问题,就是手动去抢红包的速度慢了,当然这些有很多原因导 ...

  3. 自定义实现webpack插件原理解析

    webpack插件构成部分 一个具名javascript函数 在他的原型上定义apply方法 指定一个触及到 webpack本身的事件钩子 操作webpack内部的特定实例数据 实现功能后调用 web ...

  4. Android插件化原理解析——ContentProvider的插件化

    目前为止我们已经完成了Android四大组件中Activity,Service以及BroadcastReceiver的插件化,这几个组件各不相同,我们根据它们的特点定制了不同的插件化方案:那么对于Co ...

  5. Android 插件化原理解析——Service的插件化

    在 Activity生命周期管理 以及 广播的管理 中我们详细探讨了Android系统中的Activity.BroadcastReceiver组件的工作原理以及它们的插件化方案,相信读者已经对Andr ...

  6. Android插件化原理解析——广播的管理

    在Activity生命周期管理 以及 插件加载机制 中我们详细讲述了插件化过程中对于Activity组件的处理方式,为了实现Activity的插件化我们付出了相当多的努力:那么Android系统的其他 ...

  7. Android 插件化原理解析——插件加载机制

    上文 Activity生命周期管理 中我们地完成了『启动没有在AndroidManifest.xml中显式声明的Activity』的任务:通过Hook AMS和拦截ActivityThread中H类对 ...

  8. Android 插件化原理解析——Activity生命周期管理

    之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在A ...

  9. Android插件化原理解析——Hook机制之Binder Hook

    Android系统通过Binder机制给应用程序提供了一系列的系统服务,诸如ActivityManagerService,ClipboardManager, AudioManager等:这些广泛存在系 ...

最新文章

  1. Jeff Dean亲笔盘点谷歌AI 2019:日均2篇论文,纵横16大方向,一文汇集重要开源算法...
  2. Servlet、Filter、Listener、Interceptor基础
  3. oracle定时任务失效
  4. 网站高并发及高并发架构详解
  5. 计算机 数据库知识点,数据库知识点总结
  6. TCP状态转移:有限状态机
  7. 衡量激光雷达性能好坏的标准是什么?
  8. SharePoint 2010 获取列表全部定义方法
  9. 2020公务员考试应届毕业生的身份界定
  10. 计算机网络原理基础知识点总结
  11. 音频处理——解析PCM格式实例(音量调控)
  12. 什么是数据库的存储过程?
  13. poscms-说明文档
  14. “卖给我一支笔”:乔布斯会如何应对这个经典问题?
  15. 计算机无线网卡连接网络,无线网络连接不稳定
  16. 【3分钟秒懂】MCU启动流程详解 基于NXP MPC574xG
  17. ceph kernel rbd (一): 简介
  18. 保姆级使用PyTorch训练与评估自己的MobileNetV2网络教程
  19. iOS 逆向编程(九 - 1)通过 USB 连接登录 iPhone 以及端口映射
  20. MapReduce工作流程图

热门文章

  1. Altium Designer 10 PCB简要设计及其例程
  2. libusb介绍及简单使用
  3. libusb接口说明
  4. word插入图片后只显示一部分,怎么解决?
  5. Kafka学习笔记 : 消费进度监控 [ 消费者 Lag 或 Consumer Lag ]
  6. Ubuntu20 uuv_simulator 安装
  7. 计算机查看用户 组,查看工作组计算机的方法介绍
  8. Aspose.Cells 给EXCEL区域内加上单元格边框
  9. 时间序列分析的学习与应用(一)
  10. 大家好,我叫小K,初来乍到 请多多关照~