Externí datové zdroje

Charakteristickou vlastností rámce Spring™ je snaha o zjednodušení práce s některými běžně používanými, ale poměrně složitými rozhraními nižší úrovně. Spring™ pro taková rozhraní poskytuje abstrakční vrstvu, která tvoří rozhraní vyšší úrovně a která usnadňuje programátorům práci v dané oblasti. Klasickým příkladem je abstrakční vrstva nad JDBC, která bude popsána v jedné z navazujících diplomových prací, ale stejný princip Spring™ uplatňuje i pro externí datové zdroje (resources). Externími datovými zdroji jsou myšleny všechny možné vstupní zdroje objektů třídy java.io.InputStream, tzn. soubory, zdroje dosažitelné prostřednictvím URL apod. Centrálním prvkem celé této abstrakční vrstvy je rozhraní org.springframework.core.io.Resource, které umožňuje jednotnou práci s externími zdroji všech typů. Výčet klíčových implementujících tříd ze stejného balíku může napomoci v pochopení, oč jde:

Prostřednictvím rozhraní Resource lze jednotným způsobem přistupovat k objektu typu java.io.InputStream prostřednictvím metody getInputStream() tohoto rozhraní. Velmi silnou vlastností této abstrakční vrstvy je také možnost získání příslušného externího zdroje pouze na základě zadané cesty (path). Tato cesta obsahuje volitelný prefix a samotnou cestu k externímu zdroji. Cesta může mít jeden z následujících tvarů:

Máme-li tedy objekt context typu ApplicationContext, pak můžeme k externím zdrojům přistupovat pomocí cesty takto:

Resource classPathResource = context.getResource("classpath:conf.xml");
Resource urlResource = context.getResource("file:/cesta/k/souboru/conf.xml");
Resource contextSpecificResource = context.getResource("relativni/cesta/conf.xml");

Tentýž mechanismus lze díky v aplikačním kontextu implicitně registrovanému editoru vlastností org.springframework.core.io.ResourceEditor s výhodou využít v XML konfiguračním souboru kontextu. Máme-li například třídu

class NejakyBean {
  private Resource configFile;
  public void setResource(Resource configFile) {
    this.configFile = configFile;
  }
}

pak inicializaci vlastnosti configFile můžeme provést následující XML konfigurací:

<bean id="nejakyBean" class="....NejakyBean">
  <property name="configFile" value="WEB-INF/config.xml" />
</bean>

Jde-li o webový aplikační kontext, pak atribut configFile bude reprezentovat soubor config.xml umístěný v podsložce WEB-INF webové aplikace.

Abstrakce externích datových zdrojů je samozřejmě intenzivně využívána v celém rámci Spring a popsané principy lze využít i při vytváření aplikačního kontextu. Následujícího příkladu využijeme i k předvedení, jakým způsobem lze vytvořit aplikační kontext načtením více konfiguračních souborů najednou:

ApplicationContext context = 
  new org.springframework.context.support.FileSystemXmlApplicationContext(
    new String[]{"file:/d:/ctx1.xml","classpath:ctx2.xml"});

Užitečnou specialitou při vytváření aplikačního kontextu (ale nikde jinde) je možnost specifikace množiny externích datových zdrojů pomocí jediné cesty. Lze k tomu využít jednak speciální prefix claspath*: a jednak zástupný znak * použitý v druhé části cesty. Jejich význam si vysvětlíme na následujícím příkladu:

ApplicationContext context = 
  new FileSystemXmlApplicationContext("classpath*:ctx-*.xml"});

V tomto případě bude aplikační kontext vytvořen na základě všech XML souborů, které se nacházejí v classpath a jejichž název začíná řetězcem ctx- .

Aplikaci této abstrakční vrstvy lze nalézt v souboru WEB-INF/web.xml přiložené vzorové aplikace, kde je použita pro deklaraci množiny konfiguračních XML souborů vytvářeného aplikačního kontextu.

Komentáře

Téma neobsahuje žádné komentáře.

Vložit komentář

Můžete používat značkovací jazyk Texy!


Jméno:
E-mail:
Url:
Komentář:
1 + 2 =
 
MoroSystems, s.r.o.