Например, класс RESTEasy ResteasyWebTarget имеет метод proxy(Class<T> clazz)
, как и Injector getInstance(Class<T> clazz)
. Есть ли способ сказать Гису, что создание некоторых классов должно быть делегировано в какой-то экземпляр?
Моя цель - следующее поведение Guice: когда инжектору предлагается новый экземпляр класса A, попробуйте его создать; если инстанцирование невозможно, попросите другой объект (например, экземпляр ResteasyWebTarget) создать экземпляр класса.
Я бы хотел написать такой модуль:
@Override
protected void configure() {
String apiUrl = "https://api.example.com";
Client client = new ResteasyClientBuilder().build();
target = (ResteasyWebTarget) client.target(apiUrl);
onFailureToInstantiateClass(Matchers.annotatedWith(@Path.class)).delegateTo(target);
}
вместо
@Override
protected void configure() {
String apiUrl = "https://api.example.com";
Client client = new ResteasyClientBuilder().build();
target = (ResteasyWebTarget) client.target(apiUrl);
bind(Service1.class).toProvider(() -> target.proxy(Service1.class);
bind(Service2.class).toProvider(() -> target.proxy(Service2.class);
bind(Service3.class).toProvider(() -> target.proxy(Service3.class);
}
Я думал о внедрении интерфейса Injector и использовал эту реализацию в качестве дочернего инжектора, но интерфейс имеет слишком много методов.
I может написать метод, перечисляющий все аннотированные интерфейсы в каком-то пакете и предлагая Guice использовать провайдер для них, но это подход резервного копирования.