Frage

Ich würde gerne wissen, ob es möglich ist Frühling zu verwenden, um die Abhängigkeiten eines Objekts manuell in meinem Programm erstellt zu lösen. Werfen Sie einen Blick auf die folgende Klasse:

public class TestClass {

   private MyDependency md;

   public TestClass() {
   }

   ...

   public void methodThaUsesMyDependency() {
      ...
      md.someMethod();
      ...
   }

}

Dieses Testclass ist kein Frühling Bohne, muss aber MyDependency, dass eine Feder Bohne. Gibt es irgendeine Weise, die ich diese Abhängigkeit durch Frühling injizieren kann, auch wenn ich mit einem neuen Testclass Operator in meinem Code instanziiert?

Danke

War es hilfreich?

Lösung

Edit: Die Methode, die ich weiter unten in meiner ursprünglichen Antwort zu beschreiben bin ist die allgemeine Art und Weise DI außerhalb des Behälters zu erreichen. Für Ihre besonderen Bedarf - Prüfung - Ich bin damit einverstanden Antwort mit DJs. Es ist viel besser geeignet Spring Testunterstützung, beispielsweise zu verwenden:

@Test
@ContextConfiguration(locations = { "classpath*:**/applicationContext.xml" })
public class MyTest extends AbstractTestNGSpringContextTests {

    @Resource
    private MyDependency md;

    @Test
    public void myTest() {
            ...

Während das obige Beispiel ein TestNG Test ist, gibt es auch Junit Unterstützung erklärte in 8.3.7.2. Context Management und Caching .


Allgemeiner Ansatz: Beschriften Sie Ihre Klasse mit @Configurable und AspectJ Last-Zeit nutzen oder Zeit kompilieren Weben. Siehe 6.8.1 im Frühjahr Dokumentation auf AOP für weitere Details.

Sie können dann Ihre Instanzvariablen mit @Resource mit Anmerkungen versehen oder @Autowired . Obwohl sie das gleiche Ziel von Dependency Injection erreichen, empfehle ich mit @Resource , da es sich um eine Java-Standard ist nicht Frühling spezifisch.

Schließlich erinnere mich an die transiente Schlüsselwort (oder @Transient für JPA) zu prüfen, zu verwenden, wenn Sie auf die Serialisierung oder persistierenden die Objekte in die Zukunft planen. Die Chancen stehen Sie nicht wollen, Verweise auf Ihre DI'd Repository, Service oder Komponente Bohnen serialisiert werden.

Andere Tipps

Sehen Sie die autowire () Methode auf der AutowireCapableBeanFactory Klasse. Wenn Sie eine ClasspathXmlApplicationContext verwenden, können Sie die Fabrik mit getAutowireCapableBeanFactory ()

Um die Application zu erhalten, würden Sie eine statische Singleton oder andere zentrale Repository, wie JNDI oder einen Servlet-Container verwenden müssen. Siehe DefaultLocatorFactory wie eine Instanz der Application zu erhalten.

Wenn das, was Sie brauchen, ist für Testzwecke, Frühling eine gute Unterstützung für das Szenario, die Sie oben beschrieben.

Check out Frühling Referenzhandbuch Abschnitt zum Testen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top