Was ist der minimalste Weg, um Dependency Injection zu erreichen?

8

Ich habe über Spring gelesen und obwohl es angeblich eine weniger komplexe Alternative zu EJB ist, fällt es mir schwer, meinen Kopf darum zu wickeln. Gibt es einen minimaleren Weg, Dependency Injection zu erreichen, als den Spring-Ansatz zu übernehmen?

    
Chuck 26.03.2010, 21:03
quelle

9 Antworten

3

Google Guice ist ein sehr minimalistisches DI-Framework.

    
Michael Borgwardt 26.03.2010, 21:06
quelle
9

Warum nicht einfach ohne Rahmen?

Fragen Sie, worauf Ihre Klasse angewiesen ist, und injizieren Sie dann diese Objekte über (sagen wir) den Konstruktor.

Einige Hinweise:

  1. verlässt sich Ihre Klasse auf einen Singleton? Injizieren Sie stattdessen dieses Objekt (wahrscheinlich als Fabrik)
  2. ist Ihr Objekt auf andere konkrete Klassen angewiesen? Wenn ja, injizieren Sie diese, aber verweisen Sie sie über Schnittstellen, so dass Sie verschiedene Implementierungen
  3. ersetzen können

z.B. Erstellen Sie einfach eine Klasse mit einem Konstruktor:

%Vor%

(wobei beide Parameter Schnittstellen sind) und Sie können dann die Kernkomponenten injizieren, von denen Ihr TradeSaver abhängt (Validierung und Datenbankspeicherung), mit der Möglichkeit, verschiedene Implementierungen für Tests, verschiedene Bereitstellungen usw. bereitzustellen.

    
Brian Agnew 26.03.2010 21:13
quelle
2

Eine weitere Option, die noch nicht erwähnt wurde, ist Yan . Ich habe es in der Vergangenheit benutzt und es war sehr leicht und minimalistisch. Hier ist ein Link mit einer einseitigen Einführung, was (und wie) es tut:

Ссылка

    
SyntaxT3rr0r 26.03.2010 21:21
quelle
2

Soweit es DI und IoC betrifft, wird es wahrscheinlich nicht weniger als .

Ich bevorzuge Tapestry , aber Google Guice ist ziemlich ähnlich und weit verbreitet, so dass dies eine bessere Wahl sein könnte, da es einfacher ist, Tutorials usw. zu finden.

    
Martin 26.03.2010 22:18
quelle
2

Ich empfehle dringend, dass Sie einfach Spring ausprobieren. Es ist ein bisschen komplizierter als Guice in den Anfangsstufen, aber die Wrapper für andere APIs und enthaltene Dienstprogramme (LDAPTemplate, JDBCTemplate, HibernateTemplate, Validatoren, usw.) sind die Kosten für die Aufnahme wert.

Nachdem Sie gesagt haben, dass Sie gegen den Versuch, Spring, Guice oder Seam bieten schöne Alternativen.

    
jsight 26.03.2010 23:00
quelle
1

Im Wesentlichen ist die Abhängigkeitsinjektion nur eine Möglichkeit, Ihren Code für die Wiederverwendbarkeit von Komponenten zu strukturieren. Es erfordert nicht die Verwendung eines Containers. Es bedeutet nur, dass Sie die Verwendung des "neuen" Operators für Ihre Komponenten an den Anfang Ihrer Anwendung verschieben. Beispielsweise könnte Ihr Anwendungseingangspunkt wie folgt aussehen:

%Vor%

Diese Phase wird als "Objektgrafikkonstruktion" bezeichnet. Hier verbinden Sie Objekte, die nur ihre Mitarbeiter als Schnittstellen zu bestimmten Implementierungen dieser Schnittstellen kennen.

Diese Startverkabelung kann ziemlich lang und kompliziert werden, wenn Sie Hunderte von Klassen in der Praxis haben. Aus diesem Grund wurden DI-Behälter erfunden: Sie ersetzen den Objekt-Graph-Konstruktionscode in irgendeiner Weise, z. so:

%Vor%

Die Konfiguration des Objektdiagramms, das von einem Container erstellt wird, erfolgt normalerweise über XML-Dateien, Attribute für Klassen oder Bindungen, die mit Code definiert sind.

    
Wim Coenen 27.03.2010 01:49
quelle
1

PicoContainer ist der einfachste Weg, um mit DI zu beginnen:

Angenommen, wir haben

%Vor%

dann

%Vor%     
Christopher Oezbek 31.03.2010 17:45
quelle
0

Ich würde Ihnen wärmstens empfehlen, sich eine JSR-330-Implementierung anzusehen, da diese hoffentlich der zukünftige Standard sein sollte. Es gibt einen in JEE6, aber das ist vielleicht für dich zu viel. I glaube dass der Caucho CanDI auch alleine laufen kann.

Ссылка

    
quelle
-3
  1. lies die Spring-Xml-Bean-Konfigurationsdatei
  2. schreibe es in plain java.
irreputable 26.03.2010 22:55
quelle