@FeignClient configuration参数配置

1、我们定义Feign Client时候,可以通过configuration参数指定一个配置类,那么指定的这个配置入口类上面是否需要添加 @Configuration 注解呢?

@FeignClient(name = "OrderServiceClient", contextId = "OrderServiceClient", url = "${order-service.baseUrl}",
    fallbackFactory = OrderServiceClientFallbackFactory.class, configuration = OrderServiceClientConfiguration.class)
public interface OrderServiceClient {

    /**
     * 查询订单sku信息
     */
    @PostMapping("/v1/order/skus")
    OrderSkuResponse queryOrderSku(@NotNull @RequestBody OrderSkuRequest request);

   
}


@Configuration
public class OrderServiceClientConfiguration {

    @Bean
    public OrderServiceInterceptor orderServiceInterceptor() {
        return new OrderServiceInterceptor();
    }

}

这是我工作中定义的一个Feign 接口, 然后配置了configuration参数,然后在OrderServiceClientConfiguration 配置类中注入RequestInterceptor ,一开始OrderServiceClientConfiguration 添加了 @Configuration 注解。 发现其它的Feign Client调用也会执行OrderServiceInterceptor中的代码 。废话不多说,直接看下这块源代码便知分晓。

public void registerFeignClients(AnnotationMetadata metadata,
			BeanDefinitionRegistry registry) {
		ClassPathScanningCandidateComponentProvider scanner = getScanner();
		scanner.setResourceLoader(this.resourceLoader);

        // 有些代码省略 ..... 

		for (String basePackage : basePackages) {
			Set<BeanDefinition> candidateComponents = scanner
					.findCandidateComponents(basePackage);
			for (BeanDefinition candidateComponent : candidateComponents) {
				if (candidateComponent instanceof AnnotatedBeanDefinition) {
					// verify annotated class is an interface
					AnnotatedBeanDefinition beanDefinition = (AnnotatedBeanDefinition) candidateComponent;
					AnnotationMetadata annotationMetadata = beanDefinition.getMetadata();
					Assert.isTrue(annotationMetadata.isInterface(),
							"@FeignClient can only be specified on an interface");

					Map<String, Object> attributes = annotationMetadata
							.getAnnotationAttributes(
									FeignClient.class.getCanonicalName());
                     
                    // 这段代码可以去看看,优先级 contextId > name > value 

					String name = getClientName(attributes);

                    // configuration配置参数相
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值