InversionofControl (abgekürzte als IOC)
Einfach ausgedrückt, wenn Sie ein Objekt benötigen, müssen Sie nicht manuell neu sind, aber andere Container geben Ihnen es zur Verfügung. Frühling ist ein IOC -Behälter.
Zum Beispiel:
Im Frühjahr müssen Sie häufig einen DAO im Dienst zusammenstellen und im Allgemeinen @autowired Annotation verwenden: Ähnlich wie folgt
public class ServiceImpl {@autowired Dao Dao; public void getData () {dao.getData (); }Wenn Sie DAO direkt ohne Initialisierung verwenden, wird eine Ausnahme von Nullzeiger gemeldet. Die Methode im Frühjahr besteht darin, die erforderlichen Klassen für Sie durch Reflexion zu laden.
Hier ist ein Beispiel, das die DI und IOC von Spring simuliert
Schreiben Sie zuerst zwei Anmerkungen, um den Frühling zu simulieren:
Die Entitätsannotation repräsentiert den @service @target (elementtype.type) von Spring // class @retention (retentionPolicy.runtime) public @Interface Entity {} repräsentiert die @autowrid @target (elementtype.field) von Spring // @retention (retentionpolity.runtime) der Methode // // öffentlich @Interface @Interfact Nachdem die Annotation festgelegt ist, werden zwei Klassen erstellt:
Die Regenklasse stellt die Notwendigkeit dar, Wetterdaten (Datenbank oder Server) von anderen Stellen zu erhalten.
public class rain {public void rain () {System.out.println ("Regen"); // Ich habe es direkt aus Bequemlichkeit geschrieben}}Die Wetterklasse repräsentiert die erhaltenen Wetterdaten
@EntityPublic Class Wetter {@resources regn; // Hier kommt der Regen public void weather_rain () {rain.rain (); }Das Folgende ist eine direkte Injektion durch Reflexion:
Erstens durch den angegebenen Paketnamen durchzusetzen: Dieser Schritt wird zuerst weggelassen.
Erstellen Sie zuerst eine Liste, um den Frühlingsbohnencontainer zu simulieren, und dann werden alle initialisierten Klassen mit Entitätsanmerkungen initialisiert.
öffentliche Klasse Weather_reflect {List <Object> ObjectList; // Simulation des Spring Containers public weather_reflect () {ObjectList = new ArrayList <Object> ();} // In der Tat ist der beste Weg hier, die Klasse mit Annotationen zu finden, zuerst zu beurteilen, die Entität Annotationen übergeben. ClassNotFoundException, illegalaccessexception, Instanziationsexzeption, NoSuchMethodException, InvocationTargetException {class <> clazz = Object.getClass (); if (Clazz.IsAnnotationPresent (Entity.class)) {// beurteilen, ob es Entity -Field -Field -Field -Field -Field -Field -Field -Field -Field -Field () -Fields -Field () claSGEDS (clazzg. : fields) {if (field.isannotationPresent (ressourcen.class)) {// beurteilen, ob class <?> rainclass = class.forname (field.gettType (). getName (), false, Thread.currentThread (). RainObjectList.add (Objekt); // Speichern Sie das zugewiesene Wetter schließlich in den Container}}}}} öffentliche Liste <Object> returnList () {return ObjectList; // RECHT den Container für zukünftige Verwendung} zurück}Schließlich soll die Verwendung des Controllers direkt simulieren
Public Class WeatherPrediction {public static void Haupthaupt (String args []) löst ClassNotFoundException, NoSuchMethodException, Instantiationsexception, IllegalAccessexception, InvocationTargetException aus {Wettersprüche WeatherPrediction = neue Wettervorhändigkeit (); Weather Weather Weather. Die Ausnahme von Nullzeiger wird gemeldet, und der Container weist ihm die Regenvariable zu, sodass sie normal ausgeben kann}/* Simulieren Sie den Feder -Startprozess. Tatsächlich können Sie eine Klasse separat schreiben. Dieser Schritt ist, was der Container tun sollte, und wir müssen uns keine Sorgen machen. Weather_reflect.get_ref (Wetter); // Neue Operation der Variablen in ihrer Klasse und in das Containerobjekt Objekt = Weather_reflect.ReturnList (). Get (0); Rückkehrobjekt;} Öffnen Sie die Ausgabe: Es regnet es regnetEs gibt keine neue Operation bei Regenwetterregen, kann aber verwendet werden. Dies sollte das einfachste IOC -Beispiel sein, um die Feder zu simulieren. Natürlich ist der IOC -Container von Spring viel leistungsfähiger als dieses, wie beispielsweise die Sicherheit von Threads berücksichtigt werden, und verschiedene Details sind erforderlich.
Zusammenfassen
Das obige ist die detaillierte Erklärung dieses Artikels über die einfache Implementierung des IOC -Prinzips von Spring. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf diese Seite verweisen:
Detaillierte Erklärung der Frühjahr -IOC -Prinzipien
Ein kurzes Verständnis der Beispiele von Spring IOC, AOP und Code
Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!