Architektura Spring modulů
Modulární řešení je postavené na základních vlastnostech Spring Frameworku. Využívá zásadní možnosti řetězit (seskupovat) aplikační kontexty do hierarchického stromu.
Ve stromu kontextů potom platí jednoduché pravidlo - libovolná beana vidí všechny ostatní beany ve stejném aplikačním kontextu a zároveň všechny beany v nadřazených aplikačních kontextech (tj. kontextu, který je nastaven jako parent kontext našeho aplikačního kontextu, který může mít další parent kontext atd.). Stromová struktura bezpečně zajišťuje oddělenost modulů (vlastní namespace apod), při zachování možnosti sdílet vybrané prvky s ostatními moduly.
Standardní struktura stromu kontextů v CPS může vypadat takto:

Všimněte si, že pro aplikační kontexty používáme vlastní extenze -
com.fg.webapp.cps.v1.modules.spring.context.CpsContext a
com.fg.webapp.cps.v1.modules.spring.context.ModuleContext
vycházejí ze standardního
Spring kontextu org.springframework.context.support.ClassPathXmlApplicationContext,
com.fg.webapp.cps.v1.modules.spring.context.WebModuleContext
potom vychází z org.springframework.web.context.support.XmlWebApplicationContext.
Každý Spring modul vlastní právě jeden ModuleContext - složitější moduly si mohou klidně vytvořit vlastní hierarchii
aplikačních kontextů pod tímto ModuleContextem (toho například využívá ADaM). Počítá se s tím, že ModuleContextů je
ve stromě mnoho.
Naopak WebModuleContext je právě jeden - ten je určen pro integraci s webovou aplikací, ve které vývojář používá
Spring pro řešení zákaznické logiky ušité na míru, ale přesto může těžit z jednoduchého přístupu k funkcionalitám modulů.
Konfigurace Spring modulu
Pro moduly postavené na springu je připravena třída com.fg.webapp.cps.v1.modules.spring.CpsSpringModuleAbstract.
Je podporována jak konfigurace pomocí XML souborů (metoda getOverridableConfigLocations), tak i pomocí Java konfigurace
(metoda getConfigClasses).
K definicím je možné využít tyto anotace:
com.fg.webapp.cps.v1.modules.spring.annotation.ExternalDependenciespro definici závislostí na externích modulech (alternativa k metodě getDependencies)com.fg.webapp.cps.v1.modules.spring.annotation.ModuleMessageSourcespro definici souborů s lokalizovanými texty (alternativa k metodě getDefaultModuleMessageSources)com.fg.webapp.cps.v1.modules.spring.annotation.SpringConfigurationpro definici bean v XML souborech (alternativa k metodě getOverridableConfigLocations)org.springframework.context.annotation.Configurationpro definici bean rovnou v třídě modulu (alternativa k metodě getOverridableConfigClasses)
Konfigurační soubory / třídy je možné přetížit, stejně tak je možné přetížit či doplnit lokalizované texty. Závislosti je možné namapovat v konfiguraci.
Konfigurace CpsModuleContextu
Pomocí sitemap.xml je také možné nechat nějaké beany vytvořit přímo v root kontextu CPS - ty budou potom dostupné všem kontextům modulů a webovému kontextu. Tato deklarace probíhá pomocí následujícího XML snippetu:
<spring> <location>classpath:com/fg/webapp/cps/v1/modules/spring/config1.xml</location> <location>classpath:com/fg/webapp/cps/v1/modules/spring/config2.xml</location></spring>POZOR: doporučujeme se tomuto způsobu deklarace bean vyhýbat, beany v rootovém kontextu s postupem času přibývají a jednoduše může dojít ke konfliktu vašich bean name s existujícími beanami.
