Spring má geniálne vymyslený systém properties, kde možno ukladať rozličné konfiguračné nastavenia v prostredí (Environment
) a robiť s tým kdejaké finty. Čo keď však potrebujeme úplne hlúpu vec: nahradiť premenné v reťazci konkrétnymi namapovanými hodnotami?
Zoberme si reťazec:
http://${hostname}/${path}
Zoberme si dve premenné — host s hodnotou localhost
a path s hodnotou qofola
.
Po nahradení by sme chceli získať krásnu URL:
http://localhost/qofola
Spring!
Trieda PropertyPlaceholderHelper
síce nemá úplne ideálny názov, ale má dve základné metódy:
Obe dokážu zobrať reťazec a mapovanie medzi názvami premenných a ich hodnotami. Mapovanie môže byť buď v podobe starých dobrých javáckych Properties
, alebo v podobe resolvera, čo je prakticky jednometódový interfejs (lambda!) kde zadefinujeme mapovanie.
Okrem toho má aj dva konštruktory, kde môžeme povedať:
- reťazec uvádzajúci premennú (prefix). V našom prípade ide o
${
, alebo konštantuSystemPropertyUtils.PLACEHOLDER_PREFIX
- reťazec ukončujúci premennú (suffix) — teda o
}
, či konštantuSystemPropertyUtils.PLACEHOLDER_SUFFIX
.
Môžeme si tak vytvoriť helper pre klasický vzhľad ${premennej}
, alebo zadefinovať napríklad mustachovský {{spôsob}}
.
Klasika známa zo shellu či Mavenu má v Springu už zadefinované konštanty a teda môžeme si helper vytvoriť nasledovne:
PropertyPlaceholderHelper helper
= new PropertyPlaceholderHelper(
SystemPropertyUtils.PLACEHOLDER_PREFIX,
SystemPropertyUtils.PLACEHOLDER_SUFFIX);
Nahrádzanie je potom hračka:
Properties properties = new Properties();
properties.setProperty("host", "localhost");
properties.setProperty("path", "qofola");
String url = helper.replacePlaceholders(urlTemplate, properties);
Bonusový konštruktor podporuje aj ďalšie argumenty:
- prefix (zmienený hore)
- suffix (ten sme tiež už videli)
- oddeľovač hodnoty: ak ho nastavíme správne, môžu premenné obsahovať aj implicitné (default) hodnoty. Takto môžeme mať:
${host:localhost}
, čo znamená, želocalhost
sa použije, ak nenastavíme žiadne špeciálne mapovanie pre premennúhost
. - ignorovanie nedefinovaných premenných. Ak sa premenná nenájde v mapovaní, začne helper frflať a hádzať výnimky. Ak použijeme true, helper jednoducho nechá nedefinované premenné bez zmeny.
Helper automaticky podporuje rekurzívne kľúče aj hodnoty. Ak akýkoľvek kľúč či hodnota obsahuje vnorené kľúče, tie sa budú “rozbaľovať”, kým sa celý reťazec nepodarí úspešne ponahrádzať hodnotami.
>> Home