suchen
HeimJavajavaLernprogrammDetaillierte Erklärung von Spring IOC und DI

Detaillierte Erklärung von Spring IOC und DI

Jun 23, 2020 pm 05:59 PM
diiocspring

Detaillierte Erklärung von Spring IOC und DI

Was ist Frühling?

Frühling ist ein Framework mit IoC und AOP als Kern.

IoC (Inversion of Control, Inversion of Control) ist die Grundlage des Frühlings.

IoC bedeutet einfach, dass der vorherige Programmierer beim Erstellen eines Objekts die neue Konstruktormethode aufgerufen hat, anstatt es Spring zu überlassen, das Objekt zu erstellen.

DI (Dependency Inject, Abhängigkeitsinjektion) hat die gleiche Bedeutung wie IoC, aber diese beiden Begriffe beschreiben dasselbe Konzept aus zwei Perspektiven.

Einfach ausgedrückt ist DI das Attribut des Objekts. Die relevanten Werte wurden in das Objekt eingefügt und können direkt verwendet werden.

Detaillierte Erklärung von Spring IOC und DI

IoC-Inversion of Control

  Nachdem Sie jede Objektklasse gekapselt haben, verknüpfen Sie diese Objektklassen über den IoC-Container. Auf diese Weise werden Objekte über den IoC-Container verbunden, und es besteht keine direkte Verbindung zwischen Objekten.
Detaillierte Erklärung von Spring IOC und DI

Bevor die Anwendung den IoC-Container einführt, hängt Objekt A von Objekt B ab. Wenn Objekt A dann instanziiert wird oder bis zu einem bestimmten Punkt ausgeführt wird, muss es Objekt B aktiv erstellen oder verwenden. Erstelltes Objekt B: Unabhängig davon, ob das erstellte Objekt B erstellt oder verwendet wird, liegt die Kontrolle bei der Anwendung selbst.

  Wenn die Anwendung den IoC-Container einführt, geht die direkte Verbindung zwischen Objekt A und Objekt B verloren. Wenn also Objekt A instanziiert und ausgeführt wird, wird der IoC-Container aktiv Erstellen Sie ein Objekt B und injizieren Sie es (d. h. Abhängigkeitsinjektion) an der Stelle, an der Objekt A es benötigt. Dadurch ändert sich der Prozess, bei dem Objekt A von Objekt B abhängig wird, von aktivem Verhalten zu passivem Verhalten, das heißt, die Erstellung des Objekts wird zur Verarbeitung an den IoC-Container übergeben und die Kontrollrechte werden umgekehrt sogenannte Umkehrung der Kontrolle.

DI-Dependency Injection

Der IoC-Container injiziert während der Laufzeit dynamisch bestimmte Abhängigkeiten in Objekte. Fügen Sie beispielsweise Objekt B einer Mitgliedsvariablen von Objekt A hinzu (weisen Sie es zu).

  Tatsächlich sind Dependency Injection (DI) und Inversion of Control (IoC) unterschiedliche Beschreibungen derselben Sache. In einem bestimmten Aspekt beschreiben sie sie aus unterschiedlichen Perspektiven. Die Abhängigkeitsinjektion wird aus der Perspektive der Anwendung beschrieben, d. h. die Anwendung ist darauf angewiesen, dass der Container die benötigten externen Ressourcen erstellt und einspeist, während die Umkehrung der Kontrolle aus der Perspektive des Containers beschrieben wird, d. h. der Container steuert die Die Anwendung und der Container umgekehrt. Die Anwendung injiziert externe Ressourcen, die von der Anwendung benötigt werden. Die hier genannten externen Ressourcen können externe Instanzobjekte, externe Dateiobjekte usw. sein.

IoC- und DI-Implementierung

  (1) Injektion der Property-Setter-Methode: Bezieht sich auf den IoC-Container, der die Setter-Methode verwendet, um abhängige Instanzen zu injizieren. Nach der Instanziierung einer Bean durch Aufrufen des Parameterlosen Konstruktors oder der Parameterlosen statischen Factory-Methode und Aufrufen der Setter-Methode der Bean kann die Abhängigkeitsinjektion basierend auf der Setter-Methode implementiert werden. Diese Methode ist einfach, intuitiv und leicht zu verstehen, sodass die Einstellungsinjektion von Spring weit verbreitet ist.

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");
	}

}

  (2) Konstruktormethodeninjektion: Bezieht sich auf den IoC-Container, der die Konstruktormethode verwendet, um abhängige Instanzen zu injizieren. Die auf dem Konstruktor basierende Abhängigkeitsinjektion wird durch Aufrufen des Konstruktors mit Parametern implementiert, wobei jeder Parameter eine Abhängigkeit darstellt.

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>

IoC-Test

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();
		
	}
}

DI-Test

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();
	}
	
}

Empfohlenes Tutorial: „Java-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung von Spring IOC und DI. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:jb51. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Wie trägt der JVM zu Javas 'Schreiben Sie einmal, rennen Sie irgendwohin' (Wora) Fähigkeit?Wie trägt der JVM zu Javas 'Schreiben Sie einmal, rennen Sie irgendwohin' (Wora) Fähigkeit?May 02, 2025 am 12:25 AM

JVM implementiert die Wora-Merkmale von Java durch Bytecode-Interpretation, plattformunabhängige APIs und dynamische Klassenbelastung: 1. Bytecode wird als Maschinencode interpretiert, um einen plattformübergreifenden Betrieb sicherzustellen. 2. Unterschiede zwischen API -abstrakter Betriebssystem; 3. Die Klassen werden zur Laufzeit dynamisch geladen, um eine Konsistenz zu gewährleisten.

Wie adressieren neuere Versionen von Java plattformspezifische Probleme?Wie adressieren neuere Versionen von Java plattformspezifische Probleme?May 02, 2025 am 12:18 AM

Die neueste Version von Java löst effektiv plattformspezifische Probleme durch JVM-Optimierung, Standardbibliotheksverbesserungen und Unterstützung von Drittanbietern. 1) JVM -Optimierung, wie der ZGC von Java11, verbessert die Leistung der Müllsammlung. 2) Standardbibliotheksverbesserungen wie das Modulsystem von Java9, das plattformbedingte Probleme reduziert. 3) Bibliotheken von Drittanbietern bieten plattformoptimierte Versionen wie OpenCV.

Erläutern Sie den von der JVM durchgeführten Bytecode -Überprüfungsprozess.Erläutern Sie den von der JVM durchgeführten Bytecode -Überprüfungsprozess.May 02, 2025 am 12:18 AM

Der Bytecode -Überprüfungsprozess des JVM enthält vier wichtige Schritte: 1) Überprüfen Sie, ob das Klassendateiformat den Spezifikationen entspricht, 2) Überprüfen Sie die Gültigkeit und Korrektheit der Bytecode -Anweisungen, 3) die Datenflussanalyse durchführen, um die Sicherheitstypsicherheit zu gewährleisten, und 4) Ausgleich der gründlichen Überprüfung und Leistung der Verifizierung. Durch diese Schritte stellt die JVM sicher, dass nur sichere, korrekte Bytecode ausgeführt wird, wodurch die Integrität und Sicherheit des Programms geschützt wird.

Wie vereinfacht die Unabhängigkeit von Plattform die Bereitstellung von Java -Anwendungen?Wie vereinfacht die Unabhängigkeit von Plattform die Bereitstellung von Java -Anwendungen?May 02, 2025 am 12:15 AM

Java'SplatformIndependenCealLowsApplicationStorunonanyoperatingsystemWithajvm.1) SinglecodeBase: WriteAndCompileonceForAllpatforms.2) EasyUpdates: UpdateByteCodeForsimultaneousDeployment.3) TestingEffizienz: testononePlatformForaNeunveralbehavior

Wie hat sich die Unabhängigkeit von Java im Laufe der Zeit entwickelt?Wie hat sich die Unabhängigkeit von Java im Laufe der Zeit entwickelt?May 02, 2025 am 12:12 AM

Die Unabhängigkeit von Java wird durch Technologien wie JVM, JIT -Zusammenstellung, Standardisierung, Generika, Lambda -Ausdrücke und Projektpanama kontinuierlich verbessert. Seit den neunziger Jahren hat sich Java von Basic JVM zu hoher Leistung moderner JVM entwickelt, um die Konsistenz und Effizienz des Codes über verschiedene Plattformen hinweg zu gewährleisten.

Was sind einige Strategien, um plattformspezifische Probleme in Java-Anwendungen zu mildern?Was sind einige Strategien, um plattformspezifische Probleme in Java-Anwendungen zu mildern?May 01, 2025 am 12:20 AM

Wie lindert Java plattformspezifische Probleme? Java implementiert plattformunabhängig über JVM- und Standardbibliotheken. 1) Bytecode und JVM verwenden, um die Unterschiede für das Betriebssystem abstrahieren; 2) Die Standardbibliothek bietet plattformübergreifende APIs wie Pfade der Klassenverarbeitungsdateien und die Codierung von Charset Class Processing. 3) Verwenden Sie Konfigurationsdateien und Multi-Plattform-Tests in tatsächlichen Projekten zur Optimierung und Debuggierung.

Wie ist die Beziehung zwischen der Unabhängigkeit der Java -Plattform und der Microservices -Architektur?Wie ist die Beziehung zwischen der Unabhängigkeit der Java -Plattform und der Microservices -Architektur?May 01, 2025 am 12:16 AM

Java'SplatformIndependenceEnhancesMicroservicesArchitecture byFeringDeploymentFlexibilität, Konsistenz, Skalierbarkeit und Portabilität.1) EinsatzFlexibilitätsmarkroservicestorunonanyplatformwithajvm.2) konsistenzacrossservicessimplimplimplifiesDevention und

Wie bezieht sich Graalvm auf die Unabhängigkeitsziele der Plattform von Java?Wie bezieht sich Graalvm auf die Unabhängigkeitsziele der Plattform von Java?May 01, 2025 am 12:14 AM

Graalvm verbessert die Unabhängigkeit der Java-Plattform auf drei Arten: 1. Cross-Sprach-Interoperabilität und ermöglicht es Java, nahtlos mit anderen Sprachen zusammenzuarbeiten; 2. Unabhängige Laufzeitumgebung, kompilieren Sie Java -Programme in lokale ausführbare Dateien über GraalvmnativeImage; 3. Die Leistungsoptimierung generiert Graal Compiler einen effizienten Maschinencode, um die Leistung und Konsistenz von Java -Programmen zu verbessern.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version