Z pohledu životního cyklu kontejnerem spravovaných tříd existují
dva základní způsoby poskytování objektů těchto tříd. Deklarujeme-li
element bean s atributem
singleton="true" a nebo tento atribut vynecháme
(jde totiž o defaultní hodnotu), tak kontejner vytvoří jediný objekt
dané třídy a odkaz na něj pak vrací při každém volání metody
BeanFactory.getBean("id_naseho_objektu"). Tento
objekt je tedy jedináčkem v rámci celé aplikace a i
všechny ostatní spravované třídy, které mají ve svém elementu
bean deklarovánu závislost na tomto jedináčku,
získají odkaz na tentýž objekt.
Naopak nastavíme-li naší třídě v elementu bean
atribut singleton na hodnotu
false, pak každé volání metody
BeanFactory.getBean("id_naseho_objektu") vrátí
nový objekt dané třídy. Takto definovaná třída je pak označována jako
prototyp (prototype). Je nutné ovšem zdůraznit, že jakmile je nová
instance třídy předána klientovi, tak kontejner si již odkaz na ni
nedrží, čili na prototyp nelze aplikovat žádné běžné rámcem
Spring™ poskytované deklarativní služby, o
kterých si povíme v dalším textu.
Konfigurační kód
<bean id="a" class="com.ClassA" singleton="false"> <property name="propB" ref="b" /> </bean> <bean id="b" class="com.ClassB" singleton="false"> <property name="propA" ref="a" /> </bean>
tedy říká, že při každém volání
BeanFactory.getBean("a") dostaneme úplně novou
instanci třídy ClassA, která bude mít odkaz na
úplně novou instanci třídy ClassB. Stejně tomu je
při volání BeanFactory.getBean("b").