A Spring IoC konténer a Spring keretrendszer központi eleme. A konténer létrehozza az objektumokat, összeköti őket, konfigurálja őket, és kezeli a teljes életciklusukat a létrehozástól a megsemmisítésig. A Spring konténer a függőségi injektálást (DI) használja az alkalmazást alkotó komponensek kezelésére.
A Spring a következő kétféle konténert biztosítja.
- BeanFactory konténer
- ApplicationContext konténer
Bővebben: Inversion of Control and Dependency Injection
- BeanFactory
- 1.1. Hogyan hozzunk létre BeanFactory
- 1.2. BeanFactory metódusok
- ApplicationContext
- 2.1. A ContextContextContent egy olyan eszköz, amely az adatmennyiség és a sebesség szempontjából jelentős. Az ApplicationContext típusai
- 2.2. Az XML-fájlt a webes alkalmazásból tölti be. ApplicationContext létrehozásának módja
BeanFactory
A BeanFactory lényegében nem más, mint egy fejlett gyár interfésze, amely képes a különböző babok és függőségeik nyilvántartását fenntartani.
A BeanFactory
lehetővé teszi számunkra, hogy beandefiníciókat olvassunk és elérjük azokat a bean factory segítségével.
1.1. Hogyan hozzunk létre BeanFactory
Ha csak a BeanFactory
-t használjuk, akkor létrehozhatunk egyet, és beolvashatunk néhány babdefiníciót XML formátumban az alábbiak szerint:
A babgyár létrehozásának egyéb módjai az alábbiak:
Lényegében ennyi. A getBean(String)
segítségével lekérhetjük a babjaink példányait; a BeanFactory
kliensoldali nézete meglepően egyszerű.
1.2. BeanFactory metódusok
A BeanFactory
interfésznek mindössze hat metódusa van, amelyeket az ügyfélkód meghívhat:
-
boolean containsBean(String)
: igazat ad vissza, ha aBeanFactory
tartalmaz olyan babdefiníciót vagy babpéldányt, amely megfelel a megadott névnek -
Object getBean(String)
: visszaadja a megadott név alatt regisztrált bab egy példányát. Attól függően, hogy a babot aBeanFactory
konfigurációja hogyan határozta meg, vagy egy singleton és így megosztott példányt, vagy egy újonnan létrehozott babot ad vissza. ABeansException
akkor kerül dobásra, ha vagy a babot nem sikerült megtalálni (ebben az esetbenNoSuchBeanDefinitionException
lesz), vagy a bab instanciálása és előkészítése közben kivétel történt -
Object getBean(String, Class)
: Visszaad egy babot, amely a megadott név alatt van regisztrálva. A visszaadott bean a megadott Class-ra lesz leképezve. Ha a babot nem lehetett leképezni, akkor a megfelelő kivételeket dobja (BeanNotOfRequiredTypeException
). Továbbá agetBean(String)
metódus minden szabálya érvényes (lásd fentebb) -
Class getType(String name)
: Visszaadja aClass
babot a megadott névvel. Ha nem sikerült az adott névnek megfelelő babot találni, akkor egyNoSuchBeanDefinitionException
-t dob -
boolean isSingleton(String)
: Meghatározza, hogy az adott név alatt regisztrált babdefiníció vagy babpéldány singleton-e vagy sem. Ha az adott névnek megfelelő babot nem sikerült megtalálni, akkorNoSuchBeanDefinitionException
dob -
String getAliases(String)
: Visszaadja az adott babnév aliasait, ha a babdefinícióban definiálták őket
ApplicationContext
ApplicationContext konténer több vállalatspecifikus funkciót ad hozzá, például a szöveges üzenetek feloldásának képességét egy tulajdonságfájlból és az alkalmazási események közzétételének képességét az érdekelt eseményhallgatók számára. Ezt a konténert az org.springframework.context.ApplicationContext interfész definiálja.
Az ApplicationContext konténer tartalmazza a BeanFactory konténer összes funkcionalitását, ezért általában a BeanFactory helyett ajánlott. BeanFactory
továbbra is használható olyan könnyű alkalmazásokhoz, mint a mobil eszközök vagy az applet alapú alkalmazások, ahol az adatmennyiség és a sebesség jelentős.
2.1. A ContextContextContent egy olyan eszköz, amely az adatmennyiség és a sebesség szempontjából jelentős. Az ApplicationContext típusai
A leggyakrabban használt ApplicationContext
megvalósítások a következők:
- FileSystemXmlApplicationContext – Ez a tároló egy XML-fájlból tölti be a babok definícióit. Itt meg kell adni a konstruktornak az XML babkonfigurációs fájl teljes elérési útját.
- ClassPathXmlApplicationContext – Ez a tároló a babok definícióit egy XML fájlból tölti be. Itt nem kell megadni az XML-fájl teljes elérési útját, de a CLASSPATH-ot megfelelően kell beállítani, mert ez a konténer a CLASSPATH-ban fogja keresni a babkonfigurációs XML-fájlt.
- WebXmlApplicationContext – Ez a konténer egy webes alkalmazásból tölti be az összes bab definícióit tartalmazó XML-fájlt.
2.2. Az XML-fájlt a webes alkalmazásból tölti be. ApplicationContext létrehozásának módja
Az alkalmazáskontextus példányosításának mintakódja így néz ki.