Vytvořte Dependency Injection (DI) framework, který umožňuje efektivní správu závislostí mezi třídami v aplikaci. Framework poskytuje robustní a flexibilní řešení pro konstrukci komplexních objektových modelů, přičemž využívá moderní designové vzory a osvědčené postupy. Cílem je usnadnit vývojářům práci s injekcí závislostí a zvýšit modularitu a udržovatelnost kódu.
Součástí práce je i jednoduchá aplikace, která bude vytvořený framework využívat. Nastavení probíhá prostřednictvím parametrů anotací, případně pomocí konfiguračních souborů.
POZOR: Kratší na vývoj, ale náročnější na návrh!
@Configuration
.
@Autowired
.
YAML
. V konfiguraci lze specifikovat potřebné parametry (například parametry cache nebo cesty k balíčkům, které DIF skenuje).
@Cached
, která se přidá před metodu. Takto anotovaná metoda při druhém a dalším volání vrací hodnotu z cache a tělo metody se neprovolává. Pokud je dosaženo TTL, metoda se provolá znovu.
CachingProvider
, tedy rozhraní pro speciální třídu, kterou DIF používá pro implementaci cache. Tento provider automaticky načítá konfiguraci z konfiguračního souboru, kde se nastavuje například TTL pro cache. Provider poskytuje hotovou instanci komponenty se standardizovaným rozhraním (například pro caching, persistence, logging atd.) a různí dodavatelé dodávají jeho implementaci.
CloningProvider
, tedy rozhraní pro speciální třídu, kterou DIF používá pro implementaci klonování tříd. Tento provider automaticky načítá konfiguraci z konfiguračního souboru. Provider bude využit při využití speciálního scopu Clone (viz povinné požadavky), který při každém požadavku na instanci vrátí kopii poslední vytvořené instance. Podle konfigurace CloneProvideru se provádí buď shallow copy nebo deep copy.
JSON
).