SpringBoot复习:(42)WebServerCustomizer的customize方法是在哪里被调用的?

ServletWebServletAutoConfiguration类定义如下:
在这里插入图片描述
可以看到其中通过@Import注解导入了其内部类BeanPostProcessorRegister。
在这里插入图片描述
BeanPostProcessor中定义的registerBeanDefinition方法会被Spring容器调用。
在这里插入图片描述
registerBeanDefinitions方法调用了RegistrySyntheticBeanIfMissing方法,这个方法代码如下:
在这里插入图片描述
可以看到它把传入的参数创建成BeanDefinition对象,然后注册到了Spring容器,而这个方法第三个参数为WebServerFactoryCustomizerBeanPostProcessor,所以就向Spring容器注册了WebServerFactoryCustomizerBeanPostProcessor类型的bean,
WebServerFactoryCustomizerBeanPostProcessor代码如下:
在这里插入图片描述

在这里插入图片描述
因为它是BeanPostProcessor,所以它的postProcessBeforeInitialization方法会被Spring容器调用,从图中可以看到,postProcessBeforeInitialization方法调用了容器中所有实现了WebServerFactoryCustomizer接口的bean的customize方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过实现 `FeignClientBuilderCustomizer` 接口,重写 `customize` 方法,在该方法中修改 `FeignClient` 的属性值。 具体实现如下: ```java @Component public class FeignClientNameCustomizer implements FeignClientBuilderCustomizer { @Override public void customize(FeignClientBuilder builder) { Map<String, Object> feignClientProperties = builder.getFeignClientProperties(); String name = (String) feignClientProperties.get("name"); if ("oldName".equals(name)) { feignClientProperties.put("name", "newName"); } } } ``` 在 `customize` 方法中,通过 `FeignClientBuilder` 获取 `FeignClient` 的属性值,判断是否需要修改,如果需要修改,就修改 `name` 属性值为新的值。 最后,在 `FeignClient` 接口上添加 `@EnableFeignClients(defaultConfiguration = FeignClientsConfiguration.class)` 注解,指定 `FeignClientBuilderCustomizer` 的实现类。 ```java @FeignClient(name = "oldName") public interface DemoFeignClient { @GetMapping("/demo") String demo(); } @Configuration public class FeignClientsConfiguration { @Autowired private FeignClientBuilder builder; @Autowired private FeignClientNameCustomizer feignClientNameCustomizer; @Bean public DemoFeignClient demoFeignClient() { builder.feignClientCustomizers(Collections.singletonList(feignClientNameCustomizer)); return builder.target(DemoFeignClient.class, "http://localhost:8080"); } } ``` 在 `FeignClientsConfiguration` 配置类中,注入 `FeignClientBuilder` 和 `FeignClientNameCustomizer`,并将 `FeignClientNameCustomizer` 添加到 `feignClientCustomizers` 中。最后通过 `builder.target` 方法创建 `FeignClient` 的代理对象。 这样,在启动 Spring Boot 应用时,就会自动调用 `FeignClientNameCustomizer` 的 `customize` 方法,修改 `FeignClient` 的属性值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值