Maison > Java > javaDidacticiel > Explication détaillée de Spring IOC et DI

Explication détaillée de Spring IOC et DI

Guanhui
Libérer: 2020-06-24 13:46:14
avant
3449 Les gens l'ont consulté

Explication détaillée de Spring IOC et DI

Qu'est-ce que Spring

Spring est un framework avec IoC et AOP comme noyau.

IoC (Inversion of Control, Inversion of Control) est le fondement de Spring.

IoC signifie simplement que lors de la création d'un objet, le programmeur précédent a appelé la nouvelle méthode constructeur au lieu de laisser Spring créer l'objet.

DI (Dependency Inject, injection de dépendances) a la même signification que IoC, mais ces deux termes décrivent le même concept sous deux angles.

En termes simples, DI est l'attribut de l'objet. Les valeurs pertinentes ont été injectées et peuvent être utilisées directement.

Explication détaillée de Spring IOC et DI

IoC-Inversion de contrôle

  Après avoir encapsulé chaque classe d'objets, associez ces classes d'objets via le conteneur IoC. De cette manière, les objets sont connectés via le conteneur IoC et il n'y a pas de connexion directe entre les objets.
Explication détaillée de Spring IOC et DI

Avant que l'application n'introduise le conteneur IoC, l'objet A dépend de l'objet B. Ensuite, lorsque l'objet A est instancié ou s'exécute jusqu'à un certain point, il doit créer activement l'objet B ou l'utiliser. Objet créé B, qu'il s'agisse de créer ou d'utiliser l'objet B créé, le contrôle appartient à l'application elle-même.

  Si l'application introduit le conteneur IoC, la connexion directe entre l'objet A et l'objet B est perdue. Par conséquent, lorsque l'objet A est instancié et exécuté, si l'objet B est nécessaire, le conteneur IoC le fera activement. créez un objet B et injectez-le (c'est-à-dire une injection de dépendances) à l'endroit où l'objet A en a besoin. En conséquence, le processus par lequel l'objet A devient dépendant de l'objet B passe d'un comportement actif à un comportement passif, c'est-à-dire que la création de l'objet est confiée au conteneur IoC pour traitement et les droits de contrôle sont inversés. ce qu'on appelle l'inversion du contrôle.

Injection de dépendances DI

Le conteneur IoC injecte dynamiquement certaines dépendances dans les objets pendant l'exécution. Par exemple, injectez (attribuez) l’objet B à une variable membre de l’objet A.

  En fait, l'injection de dépendance (DI) et l'inversion de contrôle (IoC) sont des descriptions différentes de la même chose, d'une certaine manière, elles la décrivent sous des perspectives différentes. L'injection de dépendances est décrite du point de vue de l'application, c'est-à-dire que l'application s'appuie sur le conteneur pour créer et injecter les ressources externes dont elle a besoin, tandis que l'inversion de contrôle est décrite du point de vue du conteneur, c'est-à-dire que le conteneur contrôle le ; application, et le conteneur à l'envers L'application injecte les ressources externes requises par l'application. Les ressources externes mentionnées ici peuvent être des objets d'instance externes, des objets fichiers externes, etc.

Implémentation IoC et DI

  (1) Injection de la méthode de définition de propriété : fait référence au conteneur IoC utilisant la méthode de définition pour injecter des instances dépendantes. Après avoir instancié un Bean en appelant le constructeur sans paramètre ou la méthode de fabrique statique sans paramètre et en appelant la méthode setter du Bean, l'injection de dépendances basée sur la méthode setter peut être implémentée. Cette méthode est simple, intuitive et facile à comprendre, c'est pourquoi l'injection de paramètres de Spring est largement utilisée.

package com.ssm.entry;

public class UserServiceImpl implements UserService {

	private UserDao userDao;
	
	// setter()实现依赖注入
	public void setUserDao(UserDao userDao){
		this.userDao = userDao;
	}
	
	public void login() {
		this.userDao.login();
		System.out.println("UserService login");
	}

}
Copier après la connexion

  (2) Injection de méthode constructeur : fait référence au conteneur IoC utilisant la méthode constructeur pour injecter des instances dépendantes. L'injection de dépendances basée sur le constructeur est implémentée en appelant le constructeur avec des paramètres, chaque paramètre représente une dépendance.

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    		http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
    		
    <!-- 将指定类配置给Spring,让Spring创建其对象的实例 控制反转 -->
		<bean id="UserDao" class="com.ssm.entry.UserDaoImpl"></bean>
		
		<!-- 添加一个id为userService的Bean 依赖注入-->
		<bean id="UserService" class="com.ssm.entry.UserServiceImpl">
			<!-- 将name为UserDao的Bean注入UserService实例中 -->
			<property name="UserDao" ref="UserDao"/>
		</bean>
</beans>
Copier après la connexion

Test IoC

package com.ssm.entry;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class IoC {
	public static void main(String[] args) {
		
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		UserDao userDao = (UserDao)applicationContext.getBean("UserDao");
		userDao.login();
		
	}
}
Copier après la connexion

Test DI

package com.ssm.entry;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DI {
	
	public static void main(String[] args) {
		ApplicationContext applicationContext = new 
				ClassPathXmlApplicationContext("applicationContext.xml");
		UserService userService = (UserService)applicationContext.getBean("UserService");
		userService.login();
	}
	
}
Copier après la connexion

Tutoriel recommandé : "Tutoriel Java"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jb51.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal