Heim Java javaLernprogramm Konzept und Analyse des IOC

Konzept und Analyse des IOC

Jul 17, 2017 pm 01:36 PM

Inversion of Control (IoC) ist ein wichtiges Merkmal des Frameworks und kein spezieller Begriff für objektorientierte Programmierung. Es hat nichts mit Dependency Injection (DI) und Dependency Lookup (Dependency Lookup) zu tun.

1. Das Konzept von IOC : IOC (Inversion of Control) bedeutet Umkehrung der Kontrolle. Zuerst müssen wir herausfinden, was umgekehrt wird. Die meisten Geschäftslogiken in Java-Programmen erfordern die gemeinsame Vervollständigung mehrerer Objekte. Wenn jedes Objekt sein kooperatives Objekt verwendet, muss es normalerweise eine Syntax wie new object() verwenden, um die Anwendung für das kooperative Objekt abzuschließen. Auf diese Weise ist der Kopplungsgrad zwischen Objekten hoch. Die Idee von IOC besteht darin, dass der Spring-Container die Erstellung und Koordination dieser voneinander abhängigen Objekte implementiert. Das Objekt muss sich nur um die Geschäftslogik selbst kümmern. In dieser Hinsicht wird die Verantwortung dafür, wie ein Objekt seine Mitarbeiter bekommt, umgekehrt . Tatsächlich hat IOC einen passenderen Namen namens DI (Dependency Injection), was Abhängigkeitsinjektion bedeutet.

Um ein beliebtes Beispiel zu nennen: Angenommen, es gibt jetzt ein Unternehmen, das Mitarbeiter benötigt, um entsprechende Arbeiten zu erledigen. Dann muss das Unternehmen Wege finden, Talente in diesem Bereich zu finden, die für das Unternehmen arbeiten auf seine Bedürfnisse. Dies ist ein traditioneller Weg. Angenommen, wir haben jetzt eine Rekrutierungs-Website. Alle Talente registrieren ihre Fähigkeiten und Fachgebiete. Wenn ein Unternehmen Talente benötigt, stellt die Website dem Unternehmen bestimmte Talente zur Verfügung Das Unternehmen muss lediglich die Beschäftigungsanforderungen veröffentlichen. Das Unternehmen in diesem Beispiel kann als EnterpriseService der Business-Klasse betrachtet werden, und das Talent ist der Mitarbeiter der Assistance-Klasse, den die Business-Klasse benötigt, um ihre Arbeit abzuschließen. Dann entspricht die Rekrutierungswebsite dem IOC-Container

<code class="java"><span class="hljs-number"><span style="color: #000000"><br/>1 . 传统获取对象的方式<br/></span></span></code>
Nach dem Login kopieren
public class EnterpriseService {

    Employee employee = new Employee();//自己通过new Object()方式获取对象public void service() {
        employee.doSomething();
    }
}
Nach dem Login kopieren
<code class="java"><span class="hljs-number"><span class="hljs-keyword"><span class="hljs-class"><span class="hljs-keyword"><span class="hljs-title"><span class="hljs-keyword"><span class="hljs-comment"><span class="hljs-function"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-title"><span class="hljs-params"><span class="hljs-number">2 . 使用IOC容器方式<br/></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
Nach dem Login kopieren
public class EnterpriseService {

    @Autowired
    Employee employee;//由容器完成对象的获取以及后续生命周期的管理public void service() {
        employee.doSomething();
    }
}
Nach dem Login kopieren

2. Analyse des Prinzips von DI
Das Prinzip von DI ist sehr einfach und wird basierend auf dem Reflexionsmechanismus von Java implementiert. Wenn wir Spring verwenden, verfügen wir über eine XML-Konfigurationsdatei. Diese Datei wird verwendet, um die Abhängigkeiten zwischen Beans zu beschreiben. Der IOC-Container verwaltet und verwaltet alle auf dieser Datei basierenden Beans und bietet erweiterte Aufgaben wie Bean-Instanz-Caching, Lebenszyklusverwaltung, Bean-Instanz-Proxy, Ereignisveröffentlichung und Ressourcenladen.
Wenn IOC gestartet wird, hilft es beim Lesen und Parsen von Ressourcendateien über Resource und ResourceLoader und speichert die Konfigurationsinformationen der Bean in der Datei. Beim Instanziieren der Bean wird dann der entsprechende Klassenlader für Reflection-Aufrufe verwendet die Setter-Methode der Bean und fügt die in der Konfigurationsdatei konfigurierten Eigenschaften in die Instanz ein, um die Erstellung des Objekts abzuschließen.

3. Verwandter Inhalt
1. Aus Sicht der Injektionsmethode gibt es drei Injektionsmethoden: Konstruktorinjektion, Attributinjektion, Schnittstelleninjektion . Spring unterstützt die Konstruktorinjektion und die Eigenschaftsinjektion.
2. BeanFactory ist eine Klassenfabrik, die die Kernschnittstelle des Spring-Frameworks darstellt. Sie bietet einen erweiterten IOC-Konfigurationsmechanismus Möglicherweise basiert ApplicationContext auf BeanFactory und bietet anwendungsorientiertere Funktionen wie Internationalisierungsunterstützung und ein Framework-Ereignissystem.
3. Beim Starten des IOC-Containers über BeanFactory werden die in der Konfigurationsdatei definierten Beans nicht sofort initialisiert. Die Initialisierungsaktion erfolgt beim ersten Aufruf . Bei Singleton-Beans speichert BeanFactory die Bean-Instanz (implementiert auf Basis von HashMap) zwischen, sodass die Bean-Instanz beim erneuten Aufruf der getBeans-Methode direkt aus dem Cache des IOC-Containers abgerufen wird.
4. Die Hauptimplementierungsklassen von ApplicationContext sind ClassPathXmlApplication und FileSystemXmlApplicationContext. Sie sind speziell für Webanwendungen vorbereitet und ermöglichen das Suchen und Laden aus Pfaden relativ zum Stammverzeichnis von Webanwendungen Datei (implementiert über die Resource-Schnittstelle und die ResourceLoader-Schnittstelle). Die ServletContext-Referenz kann vom WebApplicationContext abgerufen werden, und der gesamte WebApplicationContext wird als Eigenschaft im ServletContext platziert, damit die Webanwendungsumgebung auf den Spring-Anwendungskontext zugreifen kann. Der Webanwendung wurden drei Bean-Bereiche hinzugefügt: Anfrage, Sitzung und globale Sitzung. Die Initialisierungsmethode von WebApplicationContext unterscheidet sich von BeanFactory und ApplicationContext, da sie eine ServletContext-Instanz erfordert, das heißt, sie muss über einen Webcontainer verfügen, um die Startarbeit abzuschließen .
5 .Ein wesentlicher Unterschied zwischen der Initialisierung von ApplicationContext und der Initialisierung von BeanFactory ist: ApplicationContext instanziiert alle Beans, wenn der Anwendungskontext initialisiert wird. Ein weiterer wesentlicher Unterschied ist: ApplicationContext verwendet den Java-Reflektionsmechanismus, um die in der Konfigurationsdatei definierten BeanPostProcessor, InstantiationAwareBeanPostProcessor und BeanFactoryPostProcessor automatisch zu identifizieren und sie automatisch im Anwendungskontext zu registrieren, während BeanFactory manuell übergeben werden muss die Code-Methode addBeanPostProcessor() zum Registrieren von .
6. Bei Beans mit Scope="singleton" speichert Spring die Beans im IOC-Container, gibt die Bean-Referenz an den Aufrufer zurück und führt die nachfolgende Lebensverwaltung dieser Beans fort. Bei jedem Aufruf der getBeans-Methode wird dieselbe Bean zurückgegeben. Bei Beans mit Scope = „Prototyp“ ist Spring nicht mehr für die Lebensverwaltung der Bean verantwortlich, nachdem die Bean bei jedem Aufruf der getBeans-Methode zurückgegeben wurde , wird eine neue Bean zurückgegeben.

Das obige ist der detaillierte Inhalt vonKonzept und Analyse des IOC. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Mar 17, 2025 pm 05:35 PM

Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Mar 17, 2025 pm 05:44 PM

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Mar 17, 2025 pm 05:43 PM

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Mar 17, 2025 pm 05:46 PM

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement? Wie erstelle und verwende ich benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning und Abhängigkeitsmanagement? Mar 17, 2025 pm 05:45 PM

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.

See all articles