Spring IoC-containeren er kernen i Spring Framework. Containeren opretter objekterne, kobler dem sammen, konfigurerer dem og styrer deres komplette livscyklus fra oprettelse til destruktion. Spring-containeren bruger dependency injection (DI) til at administrere de komponenter, der udgør et program.
Spring tilbyder følgende to typer containere.
- BeanFactory container
- ApplicationContext container
Læs mere: Inversion of Control and Dependency Injection
BeanFactory
En BeanFactory er i bund og grund ikke andet end grænsefladen for en avanceret fabrik, der er i stand til at vedligeholde et register over forskellige bønner og deres afhængigheder.
Den BeanFactory
giver os mulighed for at læse bønnedefinitioner og få adgang til dem ved hjælp af bønnefabrikken.
1.1. Sådan oprettes BeanFactory
Ved brug af blot BeanFactory
kan vi oprette en og læse nogle bønnedefinitioner i XML-formatet som følger:
Andre måder at oprette bønnefabrikken på er som nedenfor:
Grundlæggende er det alt, hvad der er. Ved hjælp af getBean(String)
kan du hente instanser af dine bønner; klientsidens visning af BeanFactory
er overraskende enkel.
1.2. BeanFactory-metoder
Interfacet BeanFactory
har kun seks metoder, som klientkoden kan kalde:
-
boolean containsBean(String)
: returnerer sandt, hvisBeanFactory
indeholder en bønnedefinition eller en bønneinstans, der passer til det givne navn -
Object getBean(String)
: returnerer en instans af den bønne, der er registreret under det givne navn. Afhængigt af, hvordan bønnen blev konfigureret vedBeanFactory
-konfigurationen, returneres enten en singleton og dermed delt instans eller en nyoprettet bønne. EnBeansException
vil blive kastet, hvis bønnen enten ikke kunne findes (i så fald vil det være enNoSuchBeanDefinitionException
), eller der opstod en undtagelse under instantiering og klargøring af bønnen -
Object getBean(String, Class)
: returnerer en bønne, registreret under det angivne navn. Den returnerede bønne vil blive castet til den angivne Class. Hvis bønnen ikke kunne castes, vil de tilsvarende undtagelser blive kastet (BeanNotOfRequiredTypeException
). Desuden gælder alle regler forgetBean(String)
-metoden (se ovenfor) -
Class getType(String name)
: returnererClass
af bønnen med det angivne navn. Hvis der ikke kunne findes nogen bønne svarende til det givne navn, kastes enNoSuchBeanDefinitionException
-
boolean isSingleton(String)
: afgør, om den bønnedefinition eller bønneinstans, der er registreret under det givne navn, er en singleton eller ej. Hvis der ikke kunne findes nogen bønne, der svarer til det angivne navn, vil enNoSuchBeanDefinitionException
blive afvist -
String getAliases(String)
: Return the aliases for the given bean name, if any were defined in the bean definition
ApplicationContext
ApplicationContext container adds more enterprise-specific functionality such as the ability to resolve textual messages from a properties file and the ability to publish application events to interested event listeners. Denne container er defineret af grænsefladen org.springframework.context.ApplicationContext.
ApplicationContext-containeren indeholder al funktionalitet fra BeanFactory-containeren, så den anbefales generelt frem for BeanFactory. BeanFactory
kan stadig bruges til letvægtsapplikationer som mobile enheder eller applet-baserede applikationer, hvor datamængden og hastigheden er betydelig.
2.1. Typer af ApplicationContext
De mest almindeligt anvendte ApplicationContext
implementeringer er:
- FileSystemXmlApplicationContext – Denne container indlæser definitionerne af bønnerne fra en XML-fil. Her skal du angive den fulde sti til XML-bønnekonfigurationsfilen til konstruktøren.
- ClassPathXmlApplicationContext – Denne beholder indlæser definitionerne af bønnerne fra en XML-fil. Her behøver du ikke at angive den fulde sti til XML-filen, men du skal angive CLASSPATH korrekt, fordi denne container vil søge efter XML-filen til bønnekonfiguration i CLASSPATH.
- WebXmlApplicationContext – Denne container indlæser XML-filen med definitionerne af alle bønnerne fra en webapplikation.
2.2. Sådan oprettes ApplicationContext
En eksempelkode til instantiering af applikationskontekst vil se således ud.