Wie macht man programmgesteuert erstellen Sie ein Spring-Kontext?
Weiß jemand, ob es irgendeine Möglichkeit, dass ich programmgesteuert erstellen Sie eine bean-Kontext?
Ich möchte in der Lage sein, etwas zu tun:
ConfigurableApplicationContext c = new ConfigurableApplicationContext();
BeanDefinition bd = new BeanDefinition();
bd.setId("id");
bd.setClassName("classname");
bd.setProperty("propertyName", propertyValue");
...etc...
oder noch besser in der Lage sein, zu injizieren eine fertige Bohne in der Anwendung Kontext:
c.addBean("beanId", beanObject);
Oder wenn ich mit Anmerkungen:
c.setAnnotationAware(true);
c.setAnnotationScanBasePackage("packagename");
oder
c.addAnnotatedSpringClass("classnamethatisannotated");
Der Grund dafür ist, dass ich in der Lage sein möchten, überschreiben bean-Definitionen für die Zwecke der Prüfung - In meinem test habe ich diesem neuen Kontext Anwendung, konfiguriert mit dem code in der test - (nicht xml -) und dann diese test-Anwendung Kontext haben als Eltern die SUT Applikation Kontext.
Ich habe nicht gefunden, einen code in die spring-Bibliotheken, die das können. Hat jemand errichtet so etwas? Wäre es möglich etwas zu bauen, wie? Ich weiß, der erste Ansatz ist machbar, ich bin mir nicht 100% sicher, dass die letztere Ansätze funktionieren, ohne Bedingungen.
Problem bei xml ist, dass es ein wenig schwer. Dauert zu lange zum erstellen der xml-und es scheint ein wenig zu viel für das, was Sie zu erreichen versuchen.
Willkommen in der Welt von Java, dude.
Ich denke, wir reden über Integration-Tests, unit-Tests sind viel einfacher 🙂
InformationsquelleAutor Michael Wiles | 2009-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, entweder:
JavaConfig-code-Beispiel
BeanBuilder code-Beispiel
AtUnit code-Beispiel
Unit-test
Kontext-Datei ( private für den test )
InformationsquelleAutor Robert Munteanu
Warum verwenden Sie nicht nur zwei unterschiedlichen Kontexten? eine für Produktion, eine für die tests... wirst du über diese auf die harte Weise.
InformationsquelleAutor Chochos
Im Frühling können Sie überschreiben-bean-definition so einfach wie erscheinen wieder unten in der Datei. Wir verwenden diese viel für den eigentlichen Zweck, die Sie beschrieben; eine andere bean-definition für unit-tests als für die Produktion.
Dies ist das Muster, das wir verwenden für unsere test-context.xml
Dies bedeutet, dass die bean mit der id = overriddenBean wird WLAN in den Klassen in Ihrer Produktion contewxts wurden darauf verwiesen wird. So dass Sie zu tauschen, die Bohnen, die Sie brauchen für die Prüfung an die Stelle jener, den Sie für die Produktion von code.
Hoffe, das hilft
InformationsquelleAutor mR_fr0g
Fügen Sie einfach eine bean factory-post-Prozessor bearbeitet werden können/add bean definition
InformationsquelleAutor Martin Ahrer
Es ist eine ganz neue Art und Weise, dies zu tun - Spring Boot
InformationsquelleAutor MariuszS