Jednotlivé moduly sú vzájomne prepojené s využitím návrhového vzoru Dependency Injection. Využíva sa na to knižnica Google Guice. Praktickým dôsledkom je, že je jednoduchšie vytvoriť samostatné testy jednotlivých modulov, ktoré sú zasadené do testovacieho prostredia.
Knižnica Google Guice má veľmi dobrú dokumentáciu, preto tu spomenieme len nutné minimum.

  • Inštancie objektov (len veľkých objektov, ktoré reprezentujú jednotlivé moduly) vytvára Injector volaním .getInstance(Class<T>). Parameter volania určuje typ novej inštancie a mal by to byť interface, aby bolo možné za rôznych okolností dosadiť rôzne implementácie tohto typu.
  • Injector sa riadi konfiguráciou, ktorú definuje objekt typu AbstractModule. Konkrétna implementácia „modulu" volaniami .bind(Class<T>).to(Class<? extends T>) definuje konkrétne triedy, ktoré implementujú požadované rozhrania. Napríklad:

.bind(Main.class).to(MainImpl.class)
V prípade, že na vytvorenie inštancie má byť použitý špecifický postup, modul môže tento postup implementovať metódou označenou anotáciou @Provides.

  • Implementujúca trieda musí mať verejný štandardný konštruktor, alebo konštruktor označený anotáciou @Inject, ktorého parametre sú všetko rozhrania, pre ktoré modul definuje priradenia. Injector potom dodá jednotlivé inštancie ako argumenty.
  • Injector dokáže vyriešiť aj kruhové závislosti a to tým, že vytvorí zástupný objekt.
Napíšte komentár