Zásah do interní konfigurace modulu
V systému jsou implementovaná zadní vrátka pro případy, kdy bychom potřebovali ovlivnit chování modulu ve větších detailech, než to co modul oficiálně podporuje ve své dokumentované konfiguraci.
pro XML definice
Je možné vzít konkrétní XML soubor načítaný jakou součást aplikačního kontextu modulu a vyměnit ho za jiný,
který dodáme jako vývojáři konkrétního zákaznického projektu. Z toho důvodu existuje v CpsSpringModuleAbstract
metoda getOverridableConfigLocations, která vrací pole ukazatelů na konfigurační soubory. Každý prvek má kromě
ukazatele na daný soubor také svoje unikátní id, přes které lze v sitemap nahradit původní definici konfiguračního
souboru modulu za vlastní, nebo dodefinovat další konfigurační soubory, které mají být v aplikačním kontextu modulu
načteny.
Přetížení se potom děje následujícím způsobem:
<examplemodule> <configurationOverride> <config id="core" with="classpath:com/fg/webapp/cps/v1/modules/spring/module3-config.xml"/> <config id="data" with="file:/www/zakaznik/projekt/etc/mujDodatecnySouborProModulXY.xml"/> </configurationOverride></examplemodule>Registrace nové konfigurace:
<examplemodule> <configurationOverride> <configClass>com.fg.tm.sso.config.SecurityConfig</configClass> </configurationOverride></examplemodule>Do modulu je také možné přidat nové konfigurační soubory pomocí standardního elementu:
<examplemodule> <spring> <location>file:${project.path}/libs_groovy/cps/src/main/resources/META-INF/web_cps/spring/blog-listener-business.xml</location> </spring></examplemodule>Tak je možné dodat novou funkcionalitu dovnitř modulu (tj. nové custom beany je možné propojit s interním API modulu).
Popsaný způsob není doporučený - jedná se o poslední páku, pokud nejsou jiné možnosti. Jde o zásah do prostoru, který autor modulu považoval za soukromý a proto může podléhat zpětně nekompatibilním změnám. S upgradováním modulu pak modifikace může přestat fungovat a s tím i celý modul.
pro definice přes anotace
V modulu, který rozšiřuje modul původní - ať už na úrovni XML nebo Javy stačí zaregistrovat jen nový Spring Java config,
který bude mít kromě @Configuration anotace také @SpringConfigurationOverride anotaci. V té je uvedena classa původní
config třídy, která má být touto nahrazena.
Konfigurační třída, která overriduje by zároveň měla (ale nemusela) extendovat původní config třídu a přetížit jen
některé factory metody, s tím, že použije @Override anotaci, aby případné změny pohlídal kompilátor.
Na úrovni konfigurace modulu pak lze alternativně provést následovně:
<examplemodule> <configurationOverride> <configClass id="rest-api" with="com.fg.prj.custom.FixedConfig"/> </configurationOverride></examplemodule>Kde třída extenduje původní a pouze přetíží požadované metody.
class FixedConfig extends StageRestApiSpringConfig {
@Bean public StageRestApiSecurityFilter getStageRestApiSecurityFilter() { return new FixedFilter(); }
}