Edee.one · Dokumentace

Lifecycle

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

Konfigurač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
public class MyModule extends CpsSpringModuleAbstract {		protected SpringConfigurationItem[] getOverridableConfigLocations() {		return new SpringConfigurationItem[] {            new SpringConfigurationItem("core", "classpath:/META-INF/myModule/spring/core.xml"),            new SpringConfigurationItem("autoupdate", "classpath:/META-INF/myModule/spring/autoupdate.xml")           		};	}	}  

Konfigurace 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
@SpringConfiguration({	@SpringConfigurationItem(id = "core", resource = "classpath:/META-INF/myModule/spring/core.xml"),	@SpringConfigurationItem(id = "skipped", resource = "classpath:/META-INF/myModule/spring/skipped.xml", condition = "configuration.false == true"),	@SpringConfigurationItem(id = "empty", resource = "classpath:/META-INF/myModule/spring/autoupdate.xml")})public class MyModule extends CpsSpringModuleAbstract {		protected SpringConfigurationItem[] getOverridableConfigLocations() {		return new SpringConfigurationItem[] {            new SpringConfigurationItem("core", "classpath:/META-INF/myModule/spring/core.xml"),            new SpringConfigurationItem("autoupdate", "classpath:/META-INF/myModule/spring/autoupdate.xml")           		};	}	}  

Java 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
public class MyModule extends CpsSpringModuleAbstract {		public Class[] getJavaConfig() {		return new Class[] {            MyModuleConfiguration.class,            AnotherModuleConfiguration.class		};	}	}

Ukázka druhého přístupu:

java
@Configuration@Import({com.fg.module.AnotherConfiguration})public class MyModule extends CpsSpringModuleAbstract {		@Bean	public MyService getMyService() {		return new MyService();	}	}