Le conteneur IoC de Spring est au cœur du Framework Spring. Le conteneur va créer les objets, les câbler, les configurer, et gérer leur cycle de vie complet de la création à la destruction. Le conteneur Spring utilise l’injection de dépendance (DI) pour gérer les composants qui composent une application.
Spring fournit les deux types de conteneurs suivants.
- Conteneur BeanFactory
- Conteneur ApplicationContext
Lire la suite : Inversion de contrôle et injection de dépendances
BeanFactory
Un BeanFactory n’est essentiellement rien de plus que l’interface d’une usine avancée capable de maintenir un registre de différents beans et de leurs dépendances.
La BeanFactory
nous permet de lire les définitions de beans et d’y accéder en utilisant la fabrique de beans.
1.1. Comment créer une BeanFactory
Lorsqu’on utilise seulement la BeanFactory
, on peut en créer une et lire quelques définitions de bean au format XML comme suit :
Les autres façons de créer une bean factory sont les suivantes :
Basiquement, c’est tout ce qu’il y a. En utilisant getBean(String)
, vous pouvez récupérer les instances de vos beans ; la vue côté client de la BeanFactory
est étonnamment simple.
1.2. Méthodes de BeanFactory
L’interface BeanFactory
ne comporte que six méthodes que le code client peut appeler :
-
boolean containsBean(String)
: renvoie vrai si leBeanFactory
contient une définition ou une instance de bean qui correspond au nom donné -
Object getBean(String)
: renvoie une instance du bean enregistré sous le nom donné. Selon la façon dont le bean a été configuré par la configurationBeanFactory
, soit une instance singleton et donc partagée, soit un bean nouvellement créé sera retourné. UnBeansException
sera lancé lorsque soit le bean n’a pas pu être trouvé (dans ce cas, ce sera unNoSuchBeanDefinitionException
), soit une exception s’est produite lors de l’instanciation et de la préparation du bean -
Object getBean(String, Class)
: retourne un bean, enregistré sous le nom donné. Le bean retourné sera coulé dans la classe donnée. Si le bean n’a pas pu être cast, les exceptions correspondantes seront lancées (BeanNotOfRequiredTypeException
). En outre, toutes les règles de la méthodegetBean(String)
s’appliquent (voir ci-dessus) -
Class getType(String name)
: renvoie leClass
du bean avec le nom donné. Si aucun bean correspondant au nom donné n’a pu être trouvé, unNoSuchBeanDefinitionException
sera lancé -
boolean isSingleton(String)
: détermine si la définition de bean ou l’instance de bean enregistrée sous le nom donné est ou non un singleton. Si aucun bean correspondant au nom donné n’a pu être trouvé, unNoSuchBeanDefinitionException
sera lancé -
String getAliases(String)
: Retourner les alias pour le nom de bean donné, s’il y en a eu dans la définition du bean
ApplicationContext
Le conteneur ApplicationContext ajoute des fonctionnalités plus spécifiques à l’entreprise, telles que la capacité de résoudre des messages textuels à partir d’un fichier de propriétés et la capacité de publier des événements d’application aux auditeurs d’événements intéressés. Ce conteneur est défini par l’interface org.springframework.context.ApplicationContext.
Le conteneur ApplicationContext comprend toutes les fonctionnalités du conteneur BeanFactory, il est donc généralement recommandé par rapport au BeanFactory. BeanFactory
peut encore être utilisé pour les applications légères comme les appareils mobiles ou les applications basées sur des applets où le volume et la vitesse des données sont importants.
2.1. Types d’ApplicationContext
Les implémentations ApplicationContext
les plus couramment utilisées sont:
- FileSystemXmlApplicationContext – Ce conteneur charge les définitions des beans à partir d’un fichier XML. Ici, vous devez fournir le chemin complet du fichier de configuration des beans XML au constructeur.
- ClassPathXmlApplicationContext – Ce conteneur charge les définitions des beans à partir d’un fichier XML. Ici, vous n’avez pas besoin de fournir le chemin complet du fichier XML mais vous devez définir CLASSPATH correctement car ce conteneur cherchera le fichier XML de configuration des beans dans CLASSPATH.
- WebXmlApplicationContext – Ce conteneur charge le fichier XML avec les définitions de tous les beans à partir d’une application web.
2.2. Comment créer un ApplicationContext
Un exemple de code pour l’instanciation du contexte d’application ressemblera à ceci.