Article View: pl.comp.lang.java
Article #152090Re: @Inject "klasy bazowej"
From: Jadalbert
Date: Sat, 03 Dec 2016 09:00
Date: Sat, 03 Dec 2016 09:00
51 lines
1710 bytes
1710 bytes
W dniu 03.12.2016 o 07:32, arivald pisze: > W dniu 2016-12-02 o 17:32, Jadalbert pisze: >> Nie rozumiem takiej sytuacji (java + jsf): >> >> public class X implements Serializable {...} >> >> public class X1 extends X implements Serializable {...} >> >> public class X2 extends X implements Serializable {...} >> >> public class Run { >> >> @Inject X y; >> ... >> } >> Oczywiście y może być (w innym miejscu kodu) X1 lub X2 w zależności od >> pewnego wyboru. >> >> W linii z @Inject mam uwagę kompilatora: "Unresolved ambiguous >> dependency found as result of type safe resolution" >> I program mi się nie uruchamia. >> >> Z logu serwera jest: >> Possible dependencies: >> - Managed Bean [class newpackage.X1] with qualifiers [@Default @Named >> @Any], >> - Managed Bean [class newpackage.X] with qualifiers [@Default @Named >> @Any], >> - Managed Bean [class newpackage.X2] with qualifiers [@Default @Named >> @Any] >> >> Dlaczego tak się dzieje? > Dzięki za odpowiedź. > Bo wybór "X1 lub X2 w zależności od pewnego wyboru." musi być znany na > etapie uruchamiania,czyli np. poprzez @Qualifier. Tak to właśnie zrozumiałem (i jest przecież napisane w logu serwera). Jednak wykonanie tego przykładu w "czystej" javie nie powodowało żadnych problemów. Stąd zdziwko. > > Jak chcesz to zmieniać dynamicznie (X1 lub X2), to przypisuj jawnie. > > Albo zamiast X użyj fabryki Xów (lub raczej selektora Xów), która w > zależności od czegoś zwróci X1 lub X2, oba nadal mogą być singletonami. > > A generalnie ten wzór z @Inject X, uzywaj X1 jest używany dla X będącego > interfejsem, a X1 implementacją tego interfejsu. Wtedy działa > bezproblemowo. > Obadam te rozwiązania.
Message-ID:
<58427b80$0$15209$65785112@news.neostrada.pl>
Path:
polish.pugleaf.net!archive.newsdeef.eu!apf1.newsdeef.eu!not-for-mail
References:
<5841a204$0$5146$65785112@news.neostrada.pl> <o1tosl$10e4$1@gioia.aioe.org>