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:

java
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:

java
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:

java
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:

java
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}