Java代码实现:在springboot启动时,openfeign的feignclient接口上的注解@feignclient修改name属性值
时间: 2023-10-25 07:25:31 浏览: 164
可以通过实现 `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` 的属性值。
阅读全文