IoC Dependency Injection Google Juice vs Implementace v RCP e4 rubrika: Programování: Java

3 jan.flos
položil/-a 24.5.2014

Díval jsem se jak funguje dependency injection pomocí Google Juice a musím říct, že je to paráda. Velmi se mi mi líbí koncepce providerů umožňujích lazy injection a dávají tak systému rychlost.

Velmi mě překvapil způsob jak je udělano DI v Eclipse RCP e4. Tam nejenže není možné hierarchické injektování, navíc tam, ale dochází k tzv . reinjektování. Pokud změním objekt v kontextu tak se všechna místa, kde byl nainjektován znovu nainjektují. Sice chápu proč to tak asi je, v tomto frameworku je to na tomhle pricnipu založeno, nicméně mi to přijde velmi nebezpečné z hlediska vedlejších efektů.

Takže otázka zní, kdo se z vás setkal s RCP E4 a jak se vám tedy líbí myšlenka reinjection. Tato věc je v standardní specifikaci JSR330 nevídaná.

Komentáře

  • Michal Illich : Jak zní otázka? 23.5.2014
  • jan.flos : Máte pravdu, otázka, nebo problém nebyla zřejmý. Svůj původní dotaz jsem nyní upravil. 24.5.2014
odkaz
2 Pscheidl Pavel
odpověděl/-a 27.3.2015

Google Guice používám hlavně na SE projektech a je pravda, že je super. Je velice podobný CDI a na více místech jsem se dočetl, že kluci od JBosse se s Weldem (referenční implementace standardu CDI) inspirovali práve tam. Weld jde samozřejmě také použít na SE projekty a je obdobný jako Guice. Za tím vším někde v dálce zaostává Spring.

Reinjection je myšlenka velice zajímavá. Jenom si nedokáži představit, jak funguje reinjection u vícevláknových aplikací. Pokud nejsou injektovány jen stateless objekty, jak se řeší náhlá změna reference v datové složce třídy uprostřed vykonávání metody ? Nemusí to být jen problém ztráty aktuálního stavu objektu. Mohu ten samý dotaz položit vícekrát a v rámci jedné metody vrátí jiný výsledek. Napadá někoho jakýkoliv případ užití, který by tohle mělo "pokrýt" ?

Pro plný přístup na Devel.cz se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.