Как настроить http-клиент перед инъекцией? - PullRequest
0 голосов
/ 08 мая 2020

У меня есть класс ApiClient, который выполняет HTTP-запросы к внешней службе. Я предполагаю, что это идиоматия c - вводить HttpClient для упрощения тестирования вместо того, чтобы устанавливать его внутри. Как это сделать? Где мне настроить этого клиента и как заставить Spring внедрить его в ApiClient?

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Вы можете сделать это bean

@Configuration
public class ApiClientConfig {

    @Bean
    HttpClient httpClient(){
        //Create httpClient or build or get it however you want and return
        return HttpClient.newHttpClient();
    }


}

А затем ввести в свой класс

@Component
public class ApiClient {

    private final HttpClient httpClient;

    ApiClient(HttpClient httpClient){
        this.httpClient = httpClient;
    }

}
1 голос
/ 08 мая 2020

Есть способы сделать это, но я думаю, что вы говорите довольно просто. Как упоминалось в @ 123, это вопрос создания и внедрения bean-компонентов. Мета-пример с использованием аннотаций:

package my.scanned.package
// ...
@Component
class ApiClient {
  @Autowired 
  HttpClient httpClient;
  // contructor methods etc
}

Тогда ваш Http-клиент похож:

package my.scanned.package
// ...
@Component
class HttpClient {
  // contructor methods etc
}

Затем используйте их в чем-то вроде @Service:

package my.scanned.package
// ...
@Service
class FooService {
  @Autowired
  ApiClient apiClient;

  Response callApi() {
    return apiClient.doSomething()
  }
}

Затем опять же, в тестах будет легко просто имитировать эти бобы.

...