Zkopírovat odkaz na sekciArchitektura 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ů.
Zkopírovat odkaz na sekciKonfigurace 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.ExternalDependencies pro definici závislostí na externích modulech (alternativa k metodě getDependencies)
- com.fg.webapp.cps.v1.modules.spring.annotation.ModuleMessageSources pro definici souborů s lokalizovanými texty (alternativa k metodě getDefaultModuleMessageSources)
- com.fg.webapp.cps.v1.modules.spring.annotation.SpringConfiguration pro definici bean v XML souborech (alternativa k metodě getOverridableConfigLocations)
- org.springframework.context.annotation.Configuration pro 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.
Zkopírovat odkaz na sekciKonfigurace 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:
1 <spring>2 <location>classpath:com/fg/webapp/cps/v1/modules/spring/config1.xml</location>3 <location>classpath:com/fg/webapp/cps/v1/modules/spring/config2.xml</location>4</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.