Załóżmy, że mam klasę samochodów. W moim kodzie chcę utworzyć 10 samochodów. Klasa samochodów zawiera pewne adnotowane zależności @Inject. Jakie byłoby najlepsze podejście do tego?Tworzenie instancji w locie w CDI
CDI posiada interfejs Provider, który można używać do tworzenia samochodzie
@Inject Provider<Car> carProvider;
public void businessMethod(){
Car car = carProvider.get();
}
Niestety to nie działa, jeśli nie masz CarFactory że ma metodę z @Produces adnotacji który tworzy samochód. O ile odzwierciedla rzeczywisty świat, że nie mogę tworzyć samochodów bez fabryki, wolałbym nie pisać fabryk na wszystko. Po prostu chcę, żeby kontener CDI tworzył mój samochód, tak jak każdą inną fasolę. Jak polecasz tworzyć te samochody?
W rzeczywistości to właśnie wykorzystałem.Czy możesz naprawić swój przykład, argument konstruktora nie jest tego samego typu, co atrybut class: Car vs UIModule. Myślę również, że wstrzyknięcie powinno być annotetade z @New zamiast @Any. Lepszym przykładem użycia metody use() byłoby pokazanie, w jaki sposób można uzyskać instancję samochodu. Na przykład 'carInstances.get()' – palto
@New jest uznawane za przestarzałe w CDI 1.1, a nie w komponentach @Dependent. Zobacz CDI 1.1, sekcja 3.14. Nie rozumiem, co jest złego w korzystaniu z dostawcy, ja. e., 'CDI.current(). select (Car.class) .get()'? –
@MartinAndersson Pierwotny problem polegał na tym, że musiałem stworzyć fabrykę do korzystania z dostawcy. Przykład podany w komentarzu jest dla mnie całkowicie nowy. Może mógłbyś z tego stworzyć odpowiedź? – palto