feignclient url_关于FeignClient的使用大全——进阶篇

本文深入探讨FeignClient的进阶用法,包括如何定制FeignClient的配置,如使用Apache HttpClient替换Ribbon,支持文件上传,配置Hystrix,自定义日志系统,重试机制,响应压缩,UserAgent以及动态请求地址。通过实例解析,展示了如何通过配置不同的组件和属性,实现FeignClient的高级功能。
摘要由CSDN通过智能技术生成

关于FeignClient的基本使用,我在上一篇文章关于FeignClient的使用大全——使用篇已经介绍过了,大家可以先浏览一遍。

这一篇文章仍然是关于FeignClient,不过是进阶篇,我来讲讲如何定制自己期望的FeignClient。

1,FeignClient的实现原理

我们知道,想要开启FeignClient,首先要素就是添加@EnableFeignClients注解。其主要功能是初始化FeignClient的配置和动态执行client的请求。

我们看看EnableFeignClients的源代码,其核心是

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.TYPE)

@Documented

@Import(FeignClientsRegistrar.class)

public @interface EnableFeignClients {

/**

* Alias for the {@link #basePackages()} attribute. Allows for more concise annotation

* declarations e.g.: {@code @ComponentScan("org.my.pkg")} instead of

* {@code @ComponentScan(basePackages="org.my.pkg")}.

* @return the array of 'basePackages'.

*/

String[] value() default {};

/**

* Base packages to scan for annotated components.

*

* {@link #value()} is an alias for (and mutually exclusive with) this attribute.

*

* Use {@link #basePackageClasses()} for a type-safe alternative to String-based

* package names.

* @return the array of 'basePackages'.

*/

String[] basePackages() default {};

/**

* Type-safe alternative to {@link #basePackages()} for specifying the packages to

* scan for annotated components. The package of each class specified will be scanned.

*

* Consider creating a special no-op marker class or interface in each package that

* serves no purpose other than being referenced by this attribute.

* @return the array of 'basePackageClasses'.

*/

Class>[] basePackageClasses() default {};

/**

* A custom @Configuration for all feign clients. Can contain override

* @Bean definition for the pieces that make up the client, for instance

* {@link feign.codec.Decoder}, {@link feign.codec.Encoder}, {@link feign.Contract}.

*

* @see FeignClientsConfiguration for the defaults

* @return list of default configurations

*/

Class>[] defaultConfiguration() default {};

/**

* List of classes annotated with @FeignClient. If not empty, disables classpath

* scanning.

* @return list of FeignClient classes

*/

Class>[] clients() default {};

}

其中@Import(FeignClientsRegistrar.class)是用来初始化FeignClient配置的。我们接着看其代码,找到核心实现代码

@Override

public void registerBeanDefinitions(AnnotationMetadata metadata,

BeanDefinitionRegistry registry) {

registerDefaultConfiguration(metadata, registry);

registerFeignClients(metadata, registry);

}

其中,registerDefaultConfiguration(metadata, registry)是用来加载@EnableFeignClients中的defaultConfiguration和@FeignClient中的configuration配置文件。代码实现代码比较简单,不再细说。

registerFeignClients(metadata, regist

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值