De Spring IoC container is de kern van het Spring Framework. De container creëert de objecten, verbindt ze met elkaar, configureert ze en beheert hun volledige levenscyclus van creatie tot vernietiging. De Spring container maakt gebruik van dependency injection (DI) om de componenten waaruit een applicatie bestaat te beheren.
Spring biedt de volgende twee soorten containers.
- BeanFactory container
- ApplicationContext container
Lees meer: Inversion of Control and Dependency Injection
BeanFactory
Een BeanFactory is in wezen niets meer dan de interface voor een geavanceerde fabriek die in staat is om een register van verschillende bonen en hun afhankelijkheden bij te houden.
De BeanFactory
stelt ons in staat om baandefinities te lezen en ze te benaderen met behulp van de bonenfabriek.
1.1. Hoe maak je een BeanFactory
Wanneer we alleen de BeanFactory
gebruiken, kunnen we er een maken en een aantal bean definities in het XML formaat inlezen als volgt:
Andere manieren om een bean factory te maken zijn zoals hieronder:
Basically is dat alles wat er is. Met getBean(String)
kun je instanties van je bonen ophalen; de client-side weergave van de BeanFactory
is verrassend eenvoudig.
1.2. BeanFactory methoden
De BeanFactory
interface heeft slechts zes methoden voor client code om aan te roepen:
-
boolean containsBean(String)
: retourneert true als deBeanFactory
een baandefinitie of booninstantie bevat die overeenkomt met de gegeven naam -
Object getBean(String)
: retourneert een instantie van de boon die onder de gegeven naam is geregistreerd. Afhankelijk van hoe de boon was geconfigureerd door deBeanFactory
configuratie, zal ofwel een singleton en dus gedeelde instantie of een nieuw aangemaakte boon worden geretourneerd. EenBeansException
zal worden gegooid wanneer ofwel de boon niet kon worden gevonden (in welk geval het eenNoSuchBeanDefinitionException
zal zijn), of een uitzondering is opgetreden tijdens het instantiëren en voorbereiden van de boon -
Object getBean(String, Class)
: retourneert een boon, geregistreerd onder de gegeven naam. De teruggegeven boon zal gecast worden naar de gegeven Klasse. Als de bean niet kon worden gecast, worden overeenkomstige excepties gegooid (BeanNotOfRequiredTypeException
). Verder zijn alle regels van degetBean(String)
methode van toepassing (zie boven) -
Class getType(String name)
: geeft deClass
van de boon met de gegeven naam terug. Als geen boon met de gegeven naam kon worden gevonden, wordt eenNoSuchBeanDefinitionException
gegooid -
boolean isSingleton(String)
: bepaalt of de baandefinitie of de booninstantie die onder de gegeven naam is geregistreerd, een singleton is of niet. Als geen boon met de gegeven naam kon worden gevonden, zal eenNoSuchBeanDefinitionException
worden gegooid -
String getAliases(String)
: Geeft de aliassen voor de gegeven boonnaam terug, als die waren gedefinieerd in de baandefinitie
ApplicationContext
ApplicationContext container voegt meer bedrijfsspecifieke functionaliteit toe, zoals de mogelijkheid om tekstuele berichten uit een eigenschappenbestand op te lossen en de mogelijkheid om applicatiegebeurtenissen te publiceren naar geïnteresseerde event listeners. Deze container wordt gedefinieerd door de org.springframework.context.ApplicationContext interface.
De ApplicationContext container bevat alle functionaliteit van de BeanFactory container, dus het wordt over het algemeen aanbevolen boven de BeanFactory. BeanFactory
kan nog steeds worden gebruikt voor lichtgewicht applicaties zoals mobiele apparaten of applet-gebaseerde applicaties waar datavolume en snelheid van belang zijn.
2.1. Types ApplicationContext
De meest gebruikte ApplicationContext
implementaties zijn:
- FileSystemXmlApplicationContext – Deze container laadt de definities van de bonen uit een XML-bestand. Hier moet je het volledige pad van het XML-bestand met de bonenconfiguratie aan de constructor opgeven.
- ClassPathXmlApplicationContext – Deze container laadt de definities van de bonen uit een XML-bestand. Hier hoef je niet het volledige pad van het XML-bestand op te geven, maar je moet wel CLASSPATH goed instellen omdat deze container het XML-bestand met de bonenconfiguratie in CLASSPATH zal opzoeken.
- WebXmlApplicationContext – Deze container laadt het XML-bestand met de definities van alle bonen vanuit een webapplicatie.
2.2. Hoe maak je ApplicationContext
Een voorbeeldcode voor het instantiëren van een applicatiecontext ziet er als volgt uit.