Il contenitore Spring IoC è al centro del Framework Spring. Il contenitore crea gli oggetti, li collega, li configura e gestisce il loro ciclo di vita completo dalla creazione alla distruzione. Il contenitore Spring usa la dependency injection (DI) per gestire i componenti che compongono un’applicazione.
Spring fornisce i seguenti due tipi di contenitori.
- BeanFactory container
- ApplicationContext container
Leggi tutto: Inversione del controllo e iniezione di dipendenza
BeanFactory
Una BeanFactory non è essenzialmente altro che l’interfaccia per una fabbrica avanzata capace di mantenere un registro di diversi beans e le loro dipendenze.
La BeanFactory
ci permette di leggere le definizioni dei bean e di accedervi usando la bean factory.
1.1. Come creare BeanFactory
Quando usiamo solo la BeanFactory
possiamo crearne una e leggere alcune definizioni di bean nel formato XML come segue:
Altri modi per creare bean factory sono i seguenti:
Fondamentalmente è tutto qui. Usando getBean(String)
, puoi recuperare le istanze dei tuoi beans; la vista lato client del BeanFactory
è sorprendentemente semplice.
1.2. Metodi di BeanFactory
L’interfaccia BeanFactory
ha solo sei metodi che il codice client può chiamare:
-
boolean containsBean(String)
: restituisce true se laBeanFactory
contiene una definizione di bean o un’istanza di bean che corrisponde al nome dato -
Object getBean(String)
: ritorna un’istanza del bean registrato con il nome dato. A seconda di come il bean è stato configurato dalla configurazioneBeanFactory
, verrà restituita un’istanza singleton e quindi condivisa o un bean appena creato. UnBeansException
verrà lanciato quando o il bean non può essere trovato (nel qual caso sarà unNoSuchBeanDefinitionException
), o si è verificata un’eccezione durante l’istanza e la preparazione del bean -
Object getBean(String, Class)
: restituisce un bean, registrato con il nome dato. Il bean restituito sarà castato alla classe data. Se il bean non può essere castato, verranno lanciate le eccezioni corrispondenti (BeanNotOfRequiredTypeException
). Inoltre, si applicano tutte le regole del metodogetBean(String)
(vedi sopra) -
Class getType(String name)
: restituisce ilClass
del bean con il nome dato. Se non è stato trovato nessun bean corrispondente al nome dato, verrà lanciato unNoSuchBeanDefinitionException
-
boolean isSingleton(String)
: determina se la definizione del bean o l’istanza del bean registrata con il nome dato è un singleton. Se non è stato trovato nessun bean corrispondente al nome dato, verrà lanciato unNoSuchBeanDefinitionException
-
String getAliases(String)
: Restituisce gli alias per il nome del bean dato, se ne sono stati definiti nella definizione del bean
ApplicationContext
Il contenitore ApplicationContext aggiunge funzionalità più specifiche dell’impresa come la capacità di risolvere messaggi testuali da un file di proprietà e la capacità di pubblicare eventi dell’applicazione agli ascoltatori di eventi interessati. Questo contenitore è definito dall’interfaccia org.springframework.context.ApplicationContext.
Il contenitore ApplicationContext include tutte le funzionalità del contenitore BeanFactory, quindi è generalmente consigliato rispetto a BeanFactory. BeanFactory
può ancora essere usato per applicazioni leggere come dispositivi mobili o applicazioni basate su applet dove il volume di dati e la velocità sono significativi.
2.1. Tipi di ApplicationContext
Le implementazioni più comunemente usate ApplicationContext
sono:
- FileSystemXmlApplicationContext – Questo contenitore carica le definizioni dei beans da un file XML. Qui è necessario fornire il percorso completo del file XML di configurazione dei fagioli al costruttore.
- ClassPathXmlApplicationContext – Questo contenitore carica le definizioni dei fagioli da un file XML. Qui non è necessario fornire il percorso completo del file XML ma è necessario impostare CLASSPATH correttamente perché questo contenitore cercherà il file XML di configurazione dei fagioli in CLASSPATH.
- WebXmlApplicationContext – Questo contenitore carica il file XML con le definizioni di tutti i fagioli da un’applicazione web.
2.2. Come creare ApplicationContext
Un codice di esempio per l’istanza del contesto applicativo sarà simile a questo.