English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
L'injection de dépendance (DI) est un patron de conception qui permet de supprimer les dépendances du code de programmation, ce qui facilite la gestion et le test des applications. L'injection de dépendance rend notre code de programmation moins étroitement couplé. Pour mieux comprendre le DI, comprenons d'abord la recherche de dépendances (DL):
La recherche de dépendances est une méthode pour obtenir des ressources après la demande. Par exemple, il peut y avoir plusieurs méthodes pour obtenir des ressources:
A obj = new AImpl();
Ainsi, nous pouvons obtenir des ressources directement via le mot-clé new. Une autre méthode est la méthode d'usine :
A obj = A.getA();
Ainsi, nous obtenons des ressources en appelant la méthode statique getA().
Ou, nous pouvons obtenir des ressources via JNDI (Java Naming and Directory Interface). :
Context ctx = new InitialContext(); Context environmentCtx = (Context) ctx.lookup("java:comp"/env); A obj = (A) environmentCtx.lookup("A");
Il peut y avoir plusieurs méthodes pour obtenir des ressources. Voyons les problèmes de cette méthode.
Il y a principalement deux problèmes de recherche de dépendances.
Couplage étroit: Les méthodes de recherche de dépendances rendent le code étroitement couplé. Si les ressources sont modifiées, des modifications importantes doivent être apportées au code. Le test n'est pas facile: Cette méthode peut poser de nombreux problèmes lors du test des applications, en particulier dans les tests en noir boîte.
L'injection de dépendance est un patron de conception qui élimine les programmes. Dans ce cas, nous fournissons des informations provenant de sources externes (par exemple, un fichier XML). Cela rend notre code plus déconnecté et plus facile à tester. Dans ce cas, nous écrivons le code comme suit:
class Employee{ Address address; Employee(Address address){ this.address=address; } public void setAddress(Address address){ this.address=address; } }
Dans ce cas, l'instance de la classe Address est fournie par une source externe (par exemple, un fichier XML) via le constructeur ou la méthode setter.
Le cadre Spring fournit deux méthodes d'injection de dépendances
Par le biais du constructeur Par le biais de la méthode setter