像MyBatis,OpenFeign那样自定义注解——扫描篇

工作中遇到的问题
在使用feign进行微服务间调用的时候,发现用feign无法实现某些业务需求。而Spring Cloud
Ribbon中已经提供了支持负载均衡的RestTemplate,然而RestTemplate的使用比较繁琐,当然简单封装一下也可以,但是毕竟不如feign那样直接定义一个接口加上注解来得方便。所以我就在想能不能像mybatis或feign那样自定义一个属于自己的注解

系列文章

像MyBatis,OpenFeign那样自定义注解——扫描篇
像MyBatis,OpenFeign那样自定义注解——Jdk动态代理篇
像MyBatis,OpenFeign那样自定义注解——CGLib动态代理篇
像MyBatis,OpenFeign那样自定义注解——SpringAOP实现篇
项目地址:AnnotationDemo

我想要实现的功能

1、定义一个接口
2、在接口上加上自定义注解
3、像feign那样直接使用

思路

一开始想到的是使用spring aop来实现,实际上用spring aop实现起来也更简单
但是强迫症的我始终觉得不够像feign,于是经过对feign源码的研究,以及自己的思考,我整理了一个实现以上功能的思路
1、自定义一个注解@RestClient用于标记接口类
2、自定义一个注解@EnableRestClient用于指定扫描范围
3、对扫描出来的接口类进行动态代理
4、注册成bean

扫描篇所解决的就是思路中的1和2:

扫描出指定范围内使用@RestClient的接口

先整体的看一下我们会用到那些类:

@RestClient注解——用于标记需要扫描的接口
@EnableRestClient注解——用于指定扫描范围
RestClientsRegister——用于注册bean的定义
ClassPathBeanDefinitionScanner——类的扫描器

下面直接上代码

@RestClient注解——用于标记需要扫描的接口

@Retention(RetentionPolicy.RUNTIME) //运行时保留
@Target(ElementType.TYPE) //注解用在类上
public @interface RestClient {
   
}

@EnableRestClients 注解——用于指定扫描范围

@Retention(RetentionPolicy.RUNTIME) //运行时保留注解
@Target(ElementType.TYPE) //用于类上
@Import(RestClientsRegister.class) //这里是关键,这里告诉了Spring在开始扫描的时候所执行的类
public @interface EnableRestClients {
    
    //指定所扫描的包
    String[]  basePackages() default {
   
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值