Aplikační rámec (framework) Spring je současným hitem vývoje J2EE aplikací. Podle některých odborníků na javové technologie je Spring spolu s dalšími rozšířenými open-source nástroji hnacím motorem J2EE v souboji s konkurenčními prostředími, zejména .NETem. Popularita Springu den po dni roste, a tak i my dneškem otevíráme sérii článků, která se mu bude věnovat. V první části seriálu se podíváme na pojmy, které s tématem souvisejí – framework, Inversion of Control a Dependency Injection.
Během práce na našem publikačním systému jsme se Springem získali poměrně bohaté zkušenosti, a tak i tento seriál se bude zabývat zejména jeho praktickými, konkrétními a implementačními stránkami. Na druhou stranu, alespoň stručný a velmi neformální úvod do teorie, která se Springem souvisí, je nezbytný.
Framework
Tvorba jakékoliv netriviální aplikace obnáší nutnost zabývat se některými běžně se vyskytujícími aspekty návrhu, jakými jsou například autentizace a autorizace, správa transakcí, trvalé uložení dat v databázi apod. Dalším problémem běžných aplikací je slabá strukturovanost kódu. Tu lze řešit použitím některých návrhových vzorů, ovšem i takováto vlastní dekompozice kódu představuje zbytečné stále se opakující kódování.
Framework (někdy označován jako kontejner) tyto problémy řeší tak, že běžně se opakující funkce aplikací implementuje ve svých vlastních třídách a poskytuje tak hotovou infrastrukturu, kterou aplikace pouze využívají. Aplikační programátor se tak může soustředit jen na vlastní problém a zbytek nechat na frameworku, jenž je jeho aplikací využíván.
Typickou vlastností frameworků a la Spring je fakt, že životní cyklus aplikace má na starosti právě framework a kód aplikace je jím pouze v různých chvílích volán. Tím je zajištěn přesun kontroly nad během aplikace z aplikace do frameworku a vynucena vhodně dekomponovaná struktura dodržující rozšířené návrhové vzory.
Za framework lze označit komplexní aplikační servery, webové kontejnery (Tomcat, Resin, …) či odlehčené a úžeji specializované rámce, jakými jsou Spring, Struts či WebWork.
Inversion of Control a Dependency Injection
Spring je primárně označován jako IoC kontejner, což znamená, že jedním z jeho účelů je aplikace konceptu Inversion of Control (přeložit to můžeme jako přesun kontroly). Návrhový vzor Inversion of Control, později překřtěný na Dependency Injection (tedy jakési vnucení závislostí) představuje možnost přesunout odpovědnost za vytvoření a provázání spolupracujících objektů z aplikace do frameworku.
Síť vytvářených objektů je definována např. v nějakém konfiguračním souboru, na jehož základě je frameworkem vytvořena a objekty jsou vzájemně provázány pomocí „set“ metod (Setter Injection), konstruktorů (Constructor Injection) či rozhraní (Interface Injection). Jádro Springu je na použití Dependency Injection vyloženě postaveno a podporuje první dva typy tohoto návrhového vzoru.
Poslední komentáře