Containerul Spring IoC se află în centrul Spring Framework. Containerul va crea obiectele, le va lega între ele, le va configura și va gestiona întregul lor ciclu de viață, de la creare până la distrugere. Containerul Spring utilizează injecția de dependență (DI) pentru a gestiona componentele care alcătuiesc o aplicație.
Spring oferă următoarele două tipuri de containere.
- Container BeanFactory
- Container ApplicationContext
Citește mai departe: Inversion of Control and Dependency Injection
BeanFactory
Un BeanFactory nu este, în esență, nimic mai mult decât interfața pentru o fabrică avansată capabilă să mențină un registru de diferite beans și dependențele lor.
FactoryFactory BeanFactory
ne permite să citim definițiile bean-urilor și să le accesăm folosind fabrica de bean-uri.
1.1. Cum se creează BeanFactory
Când folosim doar BeanFactory
putem să creăm una și să citim câteva definiții de bean în format XML, după cum urmează:
Alte modalități de a crea o fabrică de bean sunt cele de mai jos:
În principiu, asta este tot ce există. Folosind getBean(String)
, puteți prelua instanțe ale boabelor dumneavoastră; vizualizarea din partea clientului a BeanFactory
este surprinzător de simplă.
1.2. Metode BeanFactory
Interfața BeanFactory
are doar șase metode pe care codul client trebuie să le apeleze:
-
boolean containsBean(String)
: returnează true dacăBeanFactory
conține o definiție de bean sau o instanță de bean care se potrivește cu numele dat -
Object getBean(String)
: returnează o instanță a beanului înregistrat sub numele dat. În funcție de modul în care a fost configurată bean-ul prin configurațiaBeanFactory
, va fi returnată fie o instanță singleton și, prin urmare, partajată, fie un bean nou creat. UnBeansException
va fi aruncat atunci când fie bean-ul nu a putut fi găsit (caz în care va fi unNoSuchBeanDefinitionException
), fie a apărut o excepție la instanțierea și pregătirea bean-ului -
Object getBean(String, Class)
: returnează un bean, înregistrat sub numele dat. Bean-ul returnat va fi transformat în clasa dată. În cazul în care bean-ul nu a putut fi turnat, se vor arunca excepțiile corespunzătoare (BeanNotOfRequiredTypeException
). În plus, se aplică toate regulile metodeigetBean(String)
(a se vedea mai sus) -
Class getType(String name)
: returneazăClass
a bean-ului cu numele dat. Dacă nu a putut fi găsit nici un bean corespunzător numelui dat, se va arunca unNoSuchBeanDefinitionException
-
boolean isSingleton(String)
: determină dacă definiția beanului sau instanța de bean înregistrată sub numele dat este sau nu un singleton. Dacă nu a putut fi găsit nici un bean care să corespundă numelui dat, se va arunca unNoSuchBeanDefinitionException
-
String getAliases(String)
: Return the aliases for the given bean name, if any were defined in the bean definition
ApplicationContext
Contenitorul ApplicationContext adaugă mai multe funcționalități specifice întreprinderilor, cum ar fi capacitatea de a rezolva mesaje textuale dintr-un fișier de proprietăți și capacitatea de a publica evenimente ale aplicației către ascultătorii de evenimente interesați. Acest container este definit de interfața org.springframework.context.ApplicationContext.
Contenitorul ApplicationContext include toate funcționalitățile containerului BeanFactory, astfel încât este în general recomandat în locul BeanFactory. BeanFactory
poate fi totuși utilizat pentru aplicații ușoare, cum ar fi dispozitivele mobile sau aplicațiile bazate pe applet-uri, unde volumul și viteza datelor sunt semnificative.
2.1. Tipuri de ApplicationContext
Cele mai frecvent utilizate ApplicationContext
implementări sunt:
- FileSystemXmlApplicationContext – Acest container încarcă definițiile beans dintr-un fișier XML. Aici trebuie să furnizați constructorului calea completă a fișierului XML de configurare a boabelor.
- ClassPathXmlApplicationContext – Acest container încarcă definițiile boabelor dintr-un fișier XML. Aici nu este necesar să furnizați calea completă a fișierului XML, dar trebuie să setați CLASSPATH în mod corespunzător, deoarece acest container va căuta fișierul XML de configurare a boabelor în CLASSPATH.
- WebXmlApplicationContext – Acest container încarcă fișierul XML cu definițiile tuturor boabelor dintr-o aplicație web.
2.2.2. Cum se creează ApplicationContext
Un exemplu de cod pentru instanțierea contextului de aplicație va arăta astfel.
.