Zkopírovat odkaz na sekciLifecycle
Při refreshi CPS se uzavírají kontexty (metoda close()) všech aplikačních kontextů stromu a z paměti by se měly instance kontextů časem odstranit. Pro novou instanci CPS vzniká nový root kontext a nové podřízené kontexty všech modulů. Tím pádem je zajištěn skutečně čistý start všech modulů z bodu nula.
Springové moduly musí implementovat rozhranní com.fg.webapp.cps.v1.modules.spring.CpsSpringModule, respektive velmi doporučuji vyjít z předimplementované abstraktní třídy com.fg.webapp.cps.v1.modules.spring.CpsSpringModuleAbstract, která obsahuje následující metody:
- getOverridableConfigLocations - touto metodou modul specifikuje seznam XML souborů, jejichž načtením se má vytvořit aplikační kontext modulu
- getJavaConfig - touto metodou modul specifikuje seznam Java konfiguračních souborů, jejichž načtením se má vytvořit aplikační kontext modulu
Modul může kombinovat XML a Java konfiguraci. Konfiguraci v Java třídách je možné přetížit / modifikovat pouze jinými Java třídami. XML konfigurace lze přetěžovat na úrovni sitemap.xml přes tzv. přetížení konfigurace.
Abstraktní předek má taktéž následující callback metody životního cyklu:
- parseModuleConfiguration - metoda je volána na začátku inicializace modulu a jejím cílem je rozparsování XML konfigurace modulu a vrácení POJO instance, která obsahuje úplnou "uživatelskou" konfiguraci modulu
- setupModuleBeforeSpringInitialization - metoda je volána ještě před vlastním vytvořením aplikačního kontextu (voláním getConfigLocations) - v této metodě doporučuji parsovat XML konfiguraci modulu ze sitemap.xml
- setupModuleContextBeforeRefresh - metoda je volána ve chvíli, kdy je již vytvoření aplikační kontext, pro který však ještě neproběhl REFRESH (tj. vytvoření instancí bean)
- setupModuleAfterSpringInitialization - metoda je volána po kompletní inicializaci Spring kontextu včetně provedení úspěšného refreshe aplikačního kontextu
- destroyModuleBeforeSpringDestruction - metoda je volána v destrukční fázi před vlastním uzavřením aplikačního kontextu
- destroyModuleAfterSpringDestruction - metoda je volána v destrukční fázi po uzavřen aplikačního kontextu
- metody podporující lokalizaci modulu - getDefaultModuleMessageSources, getDefaultModuleMessageSourcesEncoding, getReloadableResourceBundleMessageSource (viz. kapitola Podpora lokalizace)
- metody umožňující přístup k základním objektům - getApplicationEventMulticasterClass, getEventMulticaster, getModuleContext, getMessageSource
Zkopírovat odkaz na sekciKonfigurační soubory
Konfigurační soubory v XML umožňují přetížení na úrovni sitemap.xml i když se toto příliš nedoporučuje:
Ukázka:
1 public class MyModule extends CpsSpringModuleAbstract {2 3 protected SpringConfigurationItem[] getOverridableConfigLocations() {4 return new SpringConfigurationItem[] {5 new SpringConfigurationItem("core", "classpath:/META-INF/myModule/spring/core.xml"),6 new SpringConfigurationItem("autoupdate", "classpath:/META-INF/myModule/spring/autoupdate.xml") 7 };8 }9 10}
Zkopírovat odkaz na sekciKonfigurace pomocí anotací
Konfigurační soubory je možné také deklarovat pomocí anotace com.fg.webapp.cps.v1.modules.spring.annotation.SpringConfiguration. Anotace umožňuje i deklarativní podmínečné použití daných konfiguračních souborů.
Ukázka:
1 @SpringConfiguration({2 @SpringConfigurationItem(id = "core", resource = "classpath:/META-INF/myModule/spring/core.xml"),3 @SpringConfigurationItem(id = "skipped", resource = "classpath:/META-INF/myModule/spring/skipped.xml", condition = "configuration.false == true"),4 @SpringConfigurationItem(id = "empty", resource = "classpath:/META-INF/myModule/spring/autoupdate.xml")5})6public class MyModule extends CpsSpringModuleAbstract {7 8 protected SpringConfigurationItem[] getOverridableConfigLocations() {9 return new SpringConfigurationItem[] {10 new SpringConfigurationItem("core", "classpath:/META-INF/myModule/spring/core.xml"),11 new SpringConfigurationItem("autoupdate", "classpath:/META-INF/myModule/spring/autoupdate.xml") 12 };13 }14 15}
Zkopírovat odkaz na sekciJava konfigurace
Pro konfiguraci Spring modulů je možné používat i Java konfiguraci. Postačuje k tomu v metodě getJavaConfig vrátit sadu tříd, které jsou označeny anotaci @Configuration. Anotace @Configuration může být umístěna i přímo na třídě modulu.
Ukázka:
1 public class MyModule extends CpsSpringModuleAbstract {2 3 public Class[] getJavaConfig() {4 return new Class[] {5 MyModuleConfiguration.class,6 AnotherModuleConfiguration.class7 };8 }9 10}
Ukázka druhého přístupu:
1 @Configuration2@Import({com.fg.module.AnotherConfiguration})3public class MyModule extends CpsSpringModuleAbstract {4 5 @Bean6 public MyService getMyService() {7 return new MyService();8 }9 10}