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>
public class EnterpriseService { Employee employee = new Employee();//自己通过new Object()方式获取对象public void service() { employee.doSomething(); } }
<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>
public class EnterpriseService { @Autowired Employee employee;//由容器完成对象的获取以及后续生命周期的管理public void service() { employee.doSomething(); } }
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
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!