Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.lang.java > #10812
| Path | csiph.com!aioe.org!.POSTED!not-for-mail |
|---|---|
| From | arivald <arivald@nowhere.interia.pl> |
| Newsgroups | pl.comp.lang.java |
| Subject | Re: @Inject "klasy bazowej" |
| Date | Sat, 3 Dec 2016 07:32:01 +0100 |
| Organization | Aioe.org NNTP Server |
| Lines | 44 |
| Message-ID | <o1tosl$10e4$1@gioia.aioe.org> (permalink) |
| References | <5841a204$0$5146$65785112@news.neostrada.pl> |
| NNTP-Posting-Host | cZfWUlemTrEz0uwFBidLYg.user.gioia.aioe.org |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=utf-8; format=flowed |
| Content-Transfer-Encoding | 8bit |
| X-Complaints-To | abuse@aioe.org |
| User-Agent | Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 |
| X-Notice | Filtered by postfilter v. 0.8.2 |
| Xref | csiph.com pl.comp.lang.java:10812 |
Show key headers only | View raw
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?
Bo wybór "X1 lub X2 w zależności od pewnego wyboru." musi być znany na
etapie uruchamiania,czyli np. poprzez @Qualifier.
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.
--
Arivald
Back to pl.comp.lang.java | Previous | Next — Previous in thread | Next in thread | Find similar
@Inject "klasy bazowej" Jadalbert <maxorin@poczta.onet.pl> - 2016-12-02 17:32 +0100
Re: @Inject "klasy bazowej" arivald <arivald@nowhere.interia.pl> - 2016-12-03 07:32 +0100
Re: @Inject "klasy bazowej" Jadalbert <maxorin@poczta.onet.pl> - 2016-12-03 09:00 +0100
csiph-web