Ми працюємо над програмою майстра крапель і використовуємо Guice for Injection.
У мене є наступний http-дзвінок, і я створюю екземпляр http-клієнта та шаблону відпочинку. Натомість я шукаю способи, як Guice вводить ці об’єкти. Як це зробити?
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
HttpEntity request;
headers.set("Accept", MEDIA_TYPE);
request = new HttpEntity(jsonContent, headers);
return restTemplate.exchange(url, httpMethod, request, String.class);
Відповіді:
3 для відповіді № 1В ідеалі ви створили б фабрики дляоб'єкти, які часто створюються та вводять фабрики як залежності. Для тестування одиниць ви можете знущатися над виробництвом заводів і мати повний контроль над потоком коду.
Але якщо ви хочете зробити ін’єкцію RestTemplate
як пряма залежність, ви можете написати такий модуль:
public MyModule extends AbstractModule {
@Override
public void configure() {
}
@Provides
public RestTemplate providesRestTemplate() {
return new RestTemplate();
}
}
Або так:
public MyModule extends AbstractModule {
@Override
public void configure() {
bind(RestTemplate.class);
}
}
Перший приклад використовує Guice @ Поля анотація, яку я особисто віддаю перевагу. У другому використовується пряме прив’язання до класу бетону. Обидва досягають однакового результату, і ви можете ввести залежність до класу, як зазначено нижче.
public MyClass {
private final RestTemplate restTemplate;
@Inject
public MyClass(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
}