La fonctionnalité de câblage automatique du framework Spring vous permet d'injecter implicitement la dépendance d'objet. Il utilise en interne l’injection de setter ou de constructeur.
Le câblage automatique ne peut pas être utilisé pour injecter des valeurs primitives et de chaîne. Cela fonctionne avec référence uniquement.
Avantage du câblage automatique
Cela nécessite le moins de code car nous n'avons pas besoin d'écrire le code pour injecter explicitement la dépendance.
Inconvénient du câblage automatique
Aucun contrôle du programmeur.
Il ne peut pas être utilisé pour les valeurs primitives et de chaîne.
Modes de câblage automatique
Il existe de nombreux modes de câblage automatique :
Java version Linux
Non. | Mode | Description |
---|---|---|
1) | Non | Il s'agit du mode de câblage automatique par défaut. Cela signifie qu'il n'y a pas de câblage automatique par défaut. |
2) | de nom | Le mode byName injecte la dépendance objet en fonction du nom du bean. Dans ce cas, le nom de la propriété et le nom du bean doivent être identiques. Il appelle en interne la méthode setter. |
3) | par type | Le mode byType injecte la dépendance d'objet en fonction du type. Le nom de la propriété et le nom du bean peuvent donc être différents. Il appelle en interne la méthode setter. |
4) | constructeur | Le mode constructeur injecte la dépendance en appelant le constructeur de la classe. Il appelle un constructeur ayant un grand nombre de paramètres. |
5) | détection automatique | Il est obsolète depuis le printemps 3. |
Exemple de câblage automatique
Voyons le code simple pour utiliser le câblage automatique au printemps. Vous devez utiliser l'attribut autowire de l'élément bean pour appliquer les modes autowire.
Voyons l'exemple complet du câblage automatique au printemps. Pour créer cet exemple, nous avons créé 4 fichiers.
- B.java
- A.java
- applicationContext.xml
- Test.java
Cette classe contient uniquement un constructeur et une méthode.
package org.sssit; public class B { B(){System.out.println('b is created');} void print(){System.out.println('hello b');} }A.java
Cette classe contient la référence de la classe B, du constructeur et de la méthode.
package org.sssit; public class A { B b; A(){System.out.println('a is created');} public B getB() { return b; } public void setB(B b) { this.b = b; } void print(){System.out.println('hello a');} void display(){ print(); b.print(); } }applicationContext.xml
Test.java
Cette classe récupère le bean du fichier applicationContext.xml et appelle la méthode d'affichage.
package org.sssit; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext('applicationContext.xml'); A a=context.getBean('a',A.class); a.display(); } }
Sortir:
b is created a is created hello a hello b
1) mode de câblage automatique byName
En cas de mode de câblage automatique byName, l'identifiant du bean et le nom de référence doivent être identiques.
Il utilise en interne l’injection de setter.
Rakhi Sawant
Mais si vous changez le nom du bean, la dépendance n’injectera pas.
Voyons le code dans lequel nous changeons le nom du bean de b à b1.
2) mode de câblage automatique par type
En cas de mode de câblage automatique byType, l'identifiant du bean et le nom de référence peuvent être différents. Mais il ne doit y avoir qu’un seul haricot d’un type.
Il utilise en interne l’injection de setter.
Dans ce cas, cela fonctionne bien car vous avez créé une instance de type B. Peu importe que vous ayez un nom de bean différent du nom de référence.
Mais si vous avez plusieurs beans d’un même type, cela ne fonctionnera pas et lèvera une exception.
Voyons le code où se trouvent de nombreux beans de type B.
Dans ce cas, une exception sera levée.
3) mode de câblage automatique du constructeur
En cas de mode de câblage automatique du constructeur, le conteneur Spring injecte la dépendance par le constructeur paramétré le plus élevé.
Si vous avez 3 constructeurs dans une classe, zéro argument, un seul argument et deux arguments, l'injection sera effectuée en appelant le constructeur à deux arguments.
4) pas de mode de câblage automatique
En l'absence de mode de câblage automatique, le conteneur Spring n'injecte pas la dépendance par câblage automatique.