Spring IoC container är kärnan i Spring Framework. Containern skapar objekten, kopplar ihop dem, konfigurerar dem och hanterar deras hela livscykel från skapande till förstörelse. Spring-containern använder sig av dependency injection (DI) för att hantera de komponenter som utgör en applikation.
Spring tillhandahåller följande två typer av containers.
- BeanFactory container
- ApplicationContext container
Läs mer: En BeanFactory är i princip inget annat än gränssnittet för en avancerad fabrik som kan upprätthålla ett register över olika bönor och deras beroenden.
Med
BeanFactory
kan vi läsa bönedefinitioner och få tillgång till dem med hjälp av bönfabriken.1.1. Hur man skapar BeanFactory
När vi bara använder
BeanFactory
kan vi skapa en och läsa in några bönedefinitioner i XML-format enligt följande:Andra sätt att skapa bean factory är enligt nedan:
I princip är det allt som finns. Med hjälp av
getBean(String)
kan du hämta instanser av dina bönor; klientsidans vy avBeanFactory
är förvånansvärt enkel.1.2. BeanFactory-metoder
Gränssnittet
BeanFactory
har endast sex metoder som klientkoden kan anropa:
boolean containsBean(String)
: returnerar true omBeanFactory
innehåller en bönedefinition eller en böninstans som matchar det givna namnetObject getBean(String)
: returnerar en instans av bönan som registrerats under det givna namnet. Beroende på hur bönan konfigurerades genomBeanFactory
-konfigurationen returneras antingen en singleton och därmed delad instans eller en nyskapad böna. EnBeansException
kommer att kastas när antingen bönan inte kunde hittas (i så fall blir det enNoSuchBeanDefinitionException
), eller när ett undantag inträffade under instantiering och förberedelse av bönanObject getBean(String, Class)
: returnerar en böna, registrerad under det givna namnet. Den returnerade bönan kommer att kastas till den givna klassen. Om bönan inte kunde kastas kommer motsvarande undantag att utlösas (BeanNotOfRequiredTypeException
). Dessutom gäller alla regler förgetBean(String)
-metoden (se ovan)Class getType(String name)
: returnerarClass
av bönan med det givna namnet. Om ingen bean som motsvarar det givna namnet kunde hittas kommer enNoSuchBeanDefinitionException
att kastasboolean isSingleton(String)
: avgör om bönedefinitionen eller böninstansen som registrerats under det givna namnet är en singleton eller inte. Om ingen bean som motsvarar det givna namnet kunde hittas, kommer enNoSuchBeanDefinitionException
att utlösasString getAliases(String)
: Återge alias för det givna bönnamnet, om några har definierats i bönedefinitionenApplicationContext
ApplicationContext-behållaren lägger till mer företagsspecifik funktionalitet, t.ex. möjligheten att lösa textmeddelanden från en egenskapsfil och möjligheten att publicera programhändelser till intresserade händelselyssnare. Denna behållare definieras av gränssnittet org.springframework.context.ApplicationContext.
Behållaren ApplicationContext innehåller all funktionalitet i behållaren BeanFactory, så den rekommenderas i allmänhet framför BeanFactory.
BeanFactory
kan fortfarande användas för lätta applikationer som mobila enheter eller appletbaserade applikationer där datavolym och hastighet är betydande.2.1. Typer av ApplicationContext
De vanligaste
ApplicationContext
implementationerna är:
- FileSystemXmlApplicationContext – Denna behållare laddar in definitionerna av bönorna från en XML-fil. Här måste du ange den fullständiga sökvägen till XML-konfigurationsfilen för bönor till konstruktören.
- ClassPathXmlApplicationContext – Denna behållare laddar in definitionerna av bönorna från en XML-fil. Här behöver du inte ange den fullständiga sökvägen till XML-filen, men du måste ange CLASSPATH korrekt eftersom den här behållaren kommer att leta efter XML-filen för bönkonfiguration i CLASSPATH.
- WebXmlApplicationContext – Den här behållaren laddar XML-filen med definitioner av alla bönor från en webbapplikation.
2.2. Hur man skapar ApplicationContext
En exempelkod för instantiering av applikationskontext ser ut så här.