Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.lang.java > #10812

Re: @Inject "klasy bazowej"

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 | NextPrevious in thread | Next in thread | Find similar


Thread

@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