Używam lombok w moim projekcie, z wieloma klasami z @RequiredArgsConstructors
. Chciałbym, aby te konstruktory były automatycznie używane w guice.Tworzenie niestandardowej adnotacji @Inject
Jedną z opcji, która działa, jest użycie @RequiredArgsConstructors([email protected]__(@Inject))
, ale jest to zarówno brzydkie, jak i eksperymentalne (czytaj: może zniknąć z lombok w przyszłości).
Co mam zamiar zrobić, to zrobić niestandardową adnotację wtrysku, powiedzmy @InjectOnlyConstructor
, aby umieścić definicję klasy i użyć guice's SPI s, aby powiązać te typy. Ale nie wiem, jak odkryć te typy w SPI.
Jak mogę przejrzeć elementy guice i powiązać je z tymi konstruktorami, które domyślnie odrzucają guice?
Przykład czego chcę klasa wyglądać:
@Singleton
@InjectOnlyConstructor
@RequiredArgsConstructor
public class CatPictureService {
private final WebServiceClient client;
// Cool stuff that would make facebook cry
}
Jako planu tworzenia kopii zapasowych, mogę mieć moduł, który skanuje pakiety mojego projektu i automatycznie wiąże te typy.
Sztuką będzie użycie [toConstructor()] (http://google.github.io/guice/api-docs/latest/javadoc/com/google/inject/binder/LinkedBindingBuilder.html#toConstructor-java .lang.reflect.Constructor-) wiązania. Napiszę bardziej kompletne rozwiązanie później! –
@TavianBarnes Tak! Pomyślałem, że to jest sposób na wykonanie backendu, ale odkryłem, że jest to koniec odkrywania typów, które muszą być związane za pomocą SPI (tj. Niedostatecznie skanuje ścieżkę klasy). –
Styczna: Adnotacje na konstruktorach, metodach i paramertach są wymagane nie tylko w przypadku wstrzyknięć zależnych, ale w różnych innych przypadkach użycia. Biorąc pod uwagę, że status onX firmy Lombok ma status "niepewny", szukam bardziej wszechstronnego przykładu, który działa nie tylko dla Guice, ale także dla innych. Czy masz jakieś rozwiązanie? –