Spring IoC Container on Spring Frameworkin ydin. Kontti luo objektit, kytkee ne yhteen, konfiguroi ne ja hallitsee niiden koko elinkaaren luomisesta tuhoamiseen. Spring-säiliö käyttää riippuvuusinjektiota (DI, dependency injection) sovelluksen muodostavien komponenttien hallintaan.
Spring tarjoaa seuraavat kaksi konttityyppiä.
- BeanFactory-säiliö
- ApplicationContext-säiliö
Lue lisää: Inversion of Control and Dependency Injection
BeanFactory
BeanFactory ei ole pohjimmiltaan muuta kuin rajapinta kehittyneelle tehtaalle, joka kykenee ylläpitämään rekisteriä erilaisista pavuista ja niiden riippuvuuksista.
BeanFactory
:n avulla voimme lukea papumääritelmiä ja käyttää niitä paputehtaan avulla.
1.1. Miten luodaan BeanFactory
Käytettäessä pelkkää BeanFactory
voimme luoda sellaisen ja lukea joitakin papumääritelmiä XML-muodossa seuraavasti:
Muut tavat luoda paputehdas ovat seuraavat:
Periaatteessa siinä kaikki. Käyttämällä getBean(String)
voit hakea papujesi instansseja; BeanFactory
:n asiakaspuolen näkymä on yllättävän yksinkertainen.
1.2. BeanFactory-metodit
BeanFactory
-rajapinnassa on vain kuusi metodia, joita asiakaskoodi voi kutsua:
-
boolean containsBean(String)
: Palauttaa true, josBeanFactory
sisältää annettua nimeä vastaavan papumääritelmän tai papuinstanssin -
Object getBean(String)
: Palauttaa annetulla nimellä rekisteröidyn beanin instanssin. Riippuen siitä, miten papu on määritettyBeanFactory
-konfiguraatiossa, palautetaan joko singleton ja siten jaettu instanssi tai vasta luotu papu.BeansException
heitetään, kun joko pavua ei löydy (jolloin se onNoSuchBeanDefinitionException
) tai poikkeus tapahtui, kun pavua instansoitiin ja valmisteltiin -
Object getBean(String, Class)
: palauttaa annetulla nimellä rekisteröidyn beanin. Palautettu papu castataan annettuun luokkaan. Jos beania ei voitu castata, heitetään vastaavat poikkeukset (BeanNotOfRequiredTypeException
). Lisäksi sovelletaan kaikkiagetBean(String)
-metodin sääntöjä (ks. edellä) -
Class getType(String name)
: PalauttaaClass
-pavun, jolla on annettu nimi. Jos annettua nimeä vastaavaa papua ei löydy, heitetäänNoSuchBeanDefinitionException
-
boolean isSingleton(String)
: määrittää, onko annetulla nimellä rekisteröity papumääritelmä tai papuinstanssi singleton vai ei. Jos annettua nimeä vastaavaa papua ei löydy, heitetäänNoSuchBeanDefinitionException
-
String getAliases(String)
: Palauttaa annetun beanin nimen aliakset, jos sellaisia on määritelty bean määritelmässä
ApplicationContext
ApplicationContext-säiliö lisää yrityskohtaisia toimintoja, kuten kyvyn ratkaista tekstimuotoisia viestejä ominaisuustiedostosta ja kyvyn julkaista sovellustapahtumia kiinnostuneille tapahtumakuuntelijoille. Tämä kontti määritellään org.springframework.context.ApplicationContext-rajapinnalla.
ApplicationContext-kontti sisältää kaiken BeanFactory-kontin toiminnallisuuden, joten sitä suositellaan yleensä BeanFactoryn sijaan. BeanFactory
voidaan silti käyttää kevyissä sovelluksissa, kuten mobiililaitteissa tai applet-pohjaisissa sovelluksissa, joissa datan määrä ja nopeus ovat merkittäviä.
2.1. Sovelluskontti. ApplicationContext-tyypit
Yleisimmin käytetyt ApplicationContext
toteutukset ovat:
- FileSystemXmlApplicationContext – Tämä säiliö lataa papujen määritelmät XML-tiedostosta. Tässä on annettava XML-papujen määritystiedoston koko polku konstruktorille.
- ClassPathXmlApplicationContext – Tämä kontti lataa papujen määritelmät XML-tiedostosta. Tässä ei tarvitse antaa XML-tiedoston koko polkua, mutta CLASSPATH on asetettava oikein, koska tämä kontti hakee papujen konfiguraatio-XML-tiedoston CLASSPATH:sta.
- WebXmlApplicationContext – Tämä kontti lataa XML-tiedoston, jossa on kaikkien papujen määritelmät web-sovelluksen sisältä.
2.2. ApplicationContextin luominen
Esimerkkikoodi sovelluskontekstin instantiointia varten näyttää tältä.