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


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

Re: @Inject "klasy bazowej"

From arivald <arivald@nowhere.interia.pl>
Newsgroups pl.comp.lang.java
Subject Re: @Inject "klasy bazowej"
Date 2016-12-03 07:32 +0100
Organization Aioe.org NNTP Server
Message-ID <o1tosl$10e4$1@gioia.aioe.org> (permalink)
References <5841a204$0$5146$65785112@news.neostrada.pl>

Show all headers | 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