# Frage zu Dependecy Injection



## JanHH (26. Feb 2020)

Hallo,

wenn per @inject eine bean in eine andere (beides ejb, eine davon @singleton) injected wird, geschieht dies doch zum Zeitpunkt des Erzeugens, soweit ich weiss?

Also wenn ich haben

@Singleton
public class A

...

und eine EJB


@SessionScoped
@stateful
@Named
public class B
{
   @inject
   private A a;

... 


dann ist das a-Objekt innerhalb der b-Bean immer dasselbe, oder? Da keine dynamische DI, kann es niemals vom application server aus welchem Grund auch immer gegen ein anderes ausgetauscht werden.

Wenn ich dann innerhalb von B eine Referenz auf A habe
myA=a;

dann wird myA immer auf die a-Bean zeigen und niemals ein null pointer werden, während der Lebensdauer der b-Bean, richtig?

Danke.


----------



## mihe7 (26. Feb 2020)

JanHH hat gesagt.:


> geschieht dies doch zum Zeitpunkt des Erzeugens, soweit ich weiss?


Je nachdem, in Deinem Fall unmittelbar nach der Erzeugung - der Konstruktor wird vorher noch aufgerufen. 

Zum Rest: Ein Singleton existiert nur einmal für die Lebensdauer der Anwendung. Damit sollten alle Fragen beantwortet sein


----------



## JanHH (26. Feb 2020)

bedeutet also: ja, es klappt?

sicherheitshalbernochmalnachfrag

danke!


----------



## mihe7 (26. Feb 2020)

Ja, nachdem es nur eine Instanz gibt, muss es ja diese sein


----------



## JanHH (26. Feb 2020)

naja es könnte ja auch immer nur eine instanz geben, aber ab und an halt eine andere. neu erzeugen, neu injecten, alte löschen. widerspricht aber der klaren aussage "wird zum zeitpunkt der erzeugung der bean injected".


----------



## mihe7 (26. Feb 2020)

JanHH hat gesagt.:


> naja es könnte ja auch immer nur eine instanz geben, aber ab und an halt eine andere. neu erzeugen,


Dann wäre aber für die Lebensdauer der Anwendung falsch


----------



## JanHH (26. Feb 2020)

naja dann vertraue ich mal dass der kram funktioniert, danke


----------



## kay73 (18. Mrz 2020)

Grundsätzlich ist der Sinn von DI, sich zu keinem Zeitpunkt über den Zeitpunkt der Erzeugung, des Wegwerfens oder die Identität oder den Zustand  von "Beans" Gedanken zu machen. Die Lifecylce-Annotationen dienen letztlich einzig und allein dazu erkennbar zu machen, wie oft innerhalb einer Bean DI stattfindet.


----------



## mihe7 (19. Mrz 2020)

kay73 hat gesagt.:


> Die Lifecylce-Annotationen dienen letztlich einzig und allein dazu erkennbar zu machen, wie oft innerhalb einer Bean DI stattfindet.


Das ist eine sehr interessante Sichtweise.


----------



## kay73 (19. Mrz 2020)

mihe7 hat gesagt.:


> Das ist eine sehr interessante Sichtweise.


Bisschen strapaziert, gebe ich zu, "wie oft" sollte "wann" heißen. Hilft aber beim Ignorieren der Lifcecycle-Geschichten.


----------



## mihe7 (19. Mrz 2020)

Ja, mag sein, dass die Aussage nicht 100 %-ig korrekt ist (z. B. was Variablen betrifft, die nicht injected werden), aber die Sichtweise ist trotzdem interessant und meines Erachtens für DI sehr nützlich.


----------

