Spring – IoC Containers

author
3 minutes, 17 seconds Read

Kontejner Spring IoC je jádrem frameworku Spring. Kontejner vytvoří objekty, propojí je, nakonfiguruje je a řídí jejich kompletní životní cyklus od vytvoření až po zničení. Kontejner Spring používá ke správě komponent, z nichž se skládá aplikace, metodu DI (dependency injection).

Spring poskytuje následující dva typy kontejnerů.

  1. Kontejner BeanFactory
  2. Kontejner ApplicationContext

Přečtěte si více: BeanFactory není v podstatě nic jiného než rozhraní pro pokročilou továrnu, která je schopna udržovat registr různých beanů a jejich závislostí

BeanFactory

BeanFactory není v podstatě nic jiného než rozhraní pro pokročilou továrnu schopnou udržovat registr různých beanů a jejich závislostí.

Továrna na fazole BeanFactory nám umožňuje číst definice fazolí a přistupovat k nim pomocí továrny na fazole.

1.1. Jak vytvořit BeanFactory

Při použití pouze BeanFactory ji můžeme vytvořit a načíst některé definice beanů ve formátu XML takto:

Další způsoby vytvoření bean factory jsou následující:

V podstatě je to vše. Pomocí getBean(String) můžete načítat instance svých beanů; zobrazení BeanFactory na straně klienta je překvapivě jednoduché.

1.2. Metody BeanFactory

Rozhraní BeanFactory má pouze šest metod, které může volat klientský kód:

  1. boolean containsBean(String): vrací true, pokud BeanFactory obsahuje definici nebo instanci beanu, která odpovídá zadanému jménu
  2. Object getBean(String): vrací instanci beanu registrovaného pod zadaným jménem. V závislosti na tom, jak byla bean nakonfigurována pomocí konfigurace BeanFactory, bude vrácena buď singleton a tedy sdílená instance, nebo nově vytvořená bean. Výjimka BeansException bude vyhozena, pokud se buď nepodařilo bean najít (v tom případě to bude NoSuchBeanDefinitionException), nebo došlo k výjimce při instanci a přípravě beanu
  3. Object getBean(String, Class): vrátí bean, registrovaný pod daným jménem. Vrácená bean bude castována na danou třídu. Pokud se bean nepodařilo castnout, budou vyhozeny odpovídající výjimky (BeanNotOfRequiredTypeException). Dále platí všechna pravidla metody getBean(String) (viz výše)
  4. Class getType(String name): vrátí Class bean s daným jménem. Pokud se nepodařilo najít žádnou beanu odpovídající danému jménu, bude vyhozena NoSuchBeanDefinitionException
  5. boolean isSingleton(String): určuje, zda definice nebo instance beanu registrovaná pod daným jménem je či není singleton. Pokud se nepodařilo najít žádnou bean odpovídající zadanému jménu, bude vyhozeno NoSuchBeanDefinitionException
  6. String getAliases(String): Vrátí aliasy pro dané jméno beanu, pokud byly v definici beanu definovány

ApplicationContext

Kontejner ApplicationContext přidává další specifické podnikové funkce, jako je možnost překládat textové zprávy ze souboru vlastností a možnost publikovat události aplikace zainteresovaným posluchačům událostí. Tento kontejner je definován rozhraním org.springframework.context.ApplicationContext.

Kontejner ApplicationContext obsahuje veškerou funkcionalitu kontejneru BeanFactory, takže je obecně doporučován místo BeanFactory. BeanFactory Může být přesto použit pro lehké aplikace, jako jsou mobilní zařízení nebo aplikace založené na appletech, kde je důležitý objem dat a rychlost.

2.1. Typy ApplicationContext

Nejčastěji používané ApplicationContext implementace jsou:

  1. FileSystemXmlApplicationContext – Tento kontejner načítá definice beans ze souboru XML. Zde je třeba do konstruktoru zadat úplnou cestu ke konfiguračnímu souboru XML fazolí.
  2. ClassPathXmlApplicationContext – Tento kontejner načítá definice fazolí ze souboru XML. Zde nemusíte zadávat úplnou cestu k XML souboru, ale musíte správně nastavit CLASSPATH, protože tento kontejner bude hledat konfigurační XML soubor beanů v CLASSPATH.
  3. WebXmlApplicationContext – Tento kontejner načítá XML soubor s definicemi všech beanů z webové aplikace.

2.2. Jak vytvořit ApplicationContext

Ukázka kódu pro instanci aplikačního kontextu bude vypadat takto.

Similar Posts

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.