Der beste Weg zu verstehen, wie komplex ein IoC-Container ist, kommt von der Analyse.
In einer besonderen Erfahrung, einmal nahm ich einen ganzen Nachmittag Debuggen einige einfache "Hallo Welt" -Code mit plexus, auf denen Maven basiert (and here is a helpful link to browse its source code).Es kam irgendwie nach oben (um defaultPlexusContainer suchen) als:
- Classpath-Konfiguration (über classworlds)
- Erstellung einer Runtime Kontextvariable (im Grunde eine Karte), um die Speichereigenschaften und Variablen
- Konfiguration Parsen (Entdeckung von Modulen Metadaten auf classpath, usw.)
- Initialisierung:
- Bau/Instanziierung von Dienstleistungen
- Firing zusätzliche ComponentDiscoverers
- Firing zusätzlich ComponentDiscovererListeners
Dies läßt einen wichtigen Aspekt, tief in die oben genannten Schritte: eine Komponente oben betrachten. Im Plexus umfasst das Phasenkonzept die Schritte zur Konstruktion eines Objekts, und diese Phasen sind normalerweise an ein Persönlichkeitskonzept gebunden. Jedoch für den default setting wird dies durch Ausführen der folgenden Phasen:
- Objektinstanziierung (dh neue Object())
- Log Enabling (dh Einstellen eines Loggers für das Objekt)
- Composition : dh Abhängigkeit Lookup und
- Die Setter-Strategie ist ein interessanter Punkt, Einstellung, aber ich werde die Details jetzt
- Th verlassen e Passieren des Context in das Objekt erstellt
- Das Objekt zusätzliche Startprozedur
Die meisten dieser Schritte sind optional, und beinhalten in der Regel eine bestimmte Schnittstelle zu identifizieren und sie auf dem Zielobjekt aufrufen - dies ist die Standardeinstellung für die Plexus-Persönlichkeit, beachte das.
Außerdem kann jedes Objekt an einen Lifecycle-Manager gebunden sein, was meistens den Unterschied zwischen einem neuen Objekt und einem Singleton darstellt.
In meinem bestimmten Datensatz: Der schwierigste Teil ist tatsächlich das Parsen der Konfiguration und das Booten des Containers. Danach werden Sie wahrscheinlich keinen weiteren Leistungsunterschied bemerken.
Nach dem Anwenden von IoC wird Ihr System hoffentlich nicht mehr eng gekoppelt sein. ;) Ich würde vorschlagen, es auf einem Teil Ihres Systems und (wenn Leistung kritisch ist) Benchmarking zu versuchen. Ich bezweifle, dass es einen signifikanten Unterschied geben wird. Die meisten Engpässe betreffen externe Ressourcen. – TrueWill
Ich benutze bereits IoC - ich habe mich nur gefragt, ob irgendjemand dazu Informationen hatte. Kein Refactoring meiner App für eine enge Kopplung, nur um dies zu bewerten, wenn jemand schon etwas Ähnliches versucht hat! – UpTheCreek
Wenn Sie den schnellsten IoC auf dem Markt haben möchten, besuchen Sie code.google.com/p/yadic in F # für .Net und scala for java. Es ist 3 mal schneller als Autofac Lambda – Xian