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ů.
- Kontejner BeanFactory
- 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:
-
boolean containsBean(String)
: vrací true, pokudBeanFactory
obsahuje definici nebo instanci beanu, která odpovídá zadanému jménu -
Object getBean(String)
: vrací instanci beanu registrovaného pod zadaným jménem. V závislosti na tom, jak byla bean nakonfigurována pomocí konfiguraceBeanFactory
, bude vrácena buď singleton a tedy sdílená instance, nebo nově vytvořená bean. VýjimkaBeansException
bude vyhozena, pokud se buď nepodařilo bean najít (v tom případě to budeNoSuchBeanDefinitionException
), nebo došlo k výjimce při instanci a přípravě beanu -
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 metodygetBean(String)
(viz výše) -
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 vyhozenaNoSuchBeanDefinitionException
-
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 vyhozenoNoSuchBeanDefinitionException
-
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:
- 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í.
- 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.
- 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.