I-ASOS Cvičenie 1 – Úvod do Spring Framework

Úvod do Spring Framework

Dependency Injection 

Cieľom je oboznámiť sa s možnosťou DI viacerých implementácií jednej beany.

  1. Vytvorte si nový Spring projekt.
  2. Vytvore rozhranie TranslationService, ktoré deklaruje metódu translate s jedným vstupom typu String a výstupom typu String.
  3. Implementujte tri rôzne beany implementujúce rozhranie TranslationService pre tri rôzne jazyky (napr. SlovakTranslationService, EnglishTranslationService, GermanTranslationService).
  4. V main triede vytvorte závislosť na zoznam TraslationService bean.
  5. Implementujte cyklus ktorý pri štarte aplikácie iteruje zoznamom bean a vypíše preklad slova “niečo” pre každý jazyk.

Circular Dependency

Cieľom je oboznámiť sa s problémom kruhovej závislosti. Dokumentácia je dostupná na https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-dependency-resolution

  1. Vytvorte si nový Spring projekt.
  2. Vytvorte dve beany ServiceA a ServiceB podľa nasledovného kódu.

  3. Na implementáciu závislostí medzi beanami použite Constructor-based DI.
  4. Pokúste sa spustiť projekt. Mali by ste vidieť chybovú hlášku:
    The dependencies of some of the beans in the application context form a cycle:
  5. Vyriešte problém kruhovej závislosti pomocou:
    1. lazy-loadingu závislostí,
    2. setter-based DI.
  6. Zahoďte všetky doterajšie riešenia a zmeňte návrh tried tak aby kruhová závislosť vôbec nevznikla.

Bean Scopes

Cieľom je oboznámiť sa s rôznymi bean scopes. Dokumentácia je dostupná na https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes

  1. Vytvorte si nový Spring projekt.
  2. Vytvorte abstraktnú triedu AbstractBean, ktorá bude obsahovať atribút name typu String. V konštruktore nastavte tento atribút na hodnotu “<nazov triedy>:<aktualny timestamp>”.
  3. Vytvorte si nasledovné triedy: SingletonBean, PrototypeBean, RequestBean, SessionBean, ktoré dedia od AbstractBean a každej nastavte príslušný scope podľa názvu triedy (singleton, prototype, request, session).
  4. Vytvorte REST endpoint, ktorý pri zavolaní:
    1. načíta z aktuálne aplikačného kontextu (ApplicationContext) všetky beany,
    2. vytvorí reťazec obsahujúci hodnoty atribútu name jednotlivých bean vhodne oddelených (napr. “\n”),
    3. počká 500ms,
    4. znovu načíta všetky beany,
    5. do vytvoreného reťazca znova pridá hodnoty atribútu name jednotlivých bean
    6. vráti vytvorený reťazec
  5. Spustite projekt a zavolajte vytvorený endpoint (v Intellij IDEA menu Tools > HTTP Client > Test RESTful Web Service) a sledujte odpoveď. SingletonBean by mal vždy vrátiť rovnaký názov pri každom volaní – vytvára sa vždy len jedna inštancia. PrototypeBean by mal pri každom volaní vrátiť rôzne hodnoty, aj v rámci volania – pri každom načítaní z aplikačného kontextu sa vytvorí nová inštancia. RequestBean by mal pri každom volaní vrátiť rôzne hodnoty, v rámci volania by mali byť rovnaké – vytvára sa nová inštancia pre každé zavolanie endpointu. SessionBean by mal vždy vrátiť rovnaký názov pri každom volaní – vytvára sa nová inštancia pre každú používateľskú reláciu, keďže v našom projekte existuje iba jedna používateľská relácia.