Der Konsens dieser gut ein Jahr alten Diskussion scheint zu sein, dass der wesentliche Vorteil eines DI-Frameworks die Verwendung von XML-Konfigurationsdateien ist, die ohne Kompilierung geändert werden können.
Ungenau/vereinfacht ausgedrückt: ja, genauer ausgedrückt: Wenn man die Konfiguration der zu injectenden Objekte von der Verwendung trennt, ist man flexibel. Ob dabei XML, Java Annotationen oder gar Java Code selber verwendet werden ist von untergeordneter Rolle.
Aber die Verdrahtung der Objekte ist ja keine Konfiguration, die ein Endanwender oder Systemadministrator machen würde. Diese Art von Konfiguration macht der Entwickler selbst. Da der Entwickler ohnehin alles mögliche kompiliert, ist es auch kein Problem wenn dazu auch die Verdrahtung der Objekte gehört. Das ist ja eigentlich ein ganz grundlegendes Prinzip bei objektorientierten Programmen und ich sehe keinen Vorteil, wenn man das per XML macht.
Hmm.. da wiederspreche ich

Kompiliert wird von einem Build Tool, u.U. wird dieses auch von einem CI Server aufgerufen.
In einem "echtem" Unittest will man die einzelnen Komponenten isoliert testen, d.h. die Abhängigkeiten der Komponente werden ersetzt.
Wäre doch schlecht wenn da alles festverdrahtet wäre in so einem Fall

Auch kann man Konfigurationsdateien im Textformat (Proeprties, XML, etc.) einfacher filtern, da diese nicht mehr kompiliert werden müssen.
Das gehört übrigens nicht zu Grundlagen der OO, DI & Komponentenarchitektur sind weiterführende Themen, die kaum beachtet wurden bevor Testen populär wurde.
Im Gegenteil ist XML eine weitere Technologie, mit der man sich beschäftigen muss, für die man spezielle Werkzeugunterstützung braucht (wenn es nicht zu grausam werden soll). Man fängt an, in XML Dinge nachzubilden, die logische Zusammenhänge beschreiben, was mit Programmiersprachen besser geht. Und sei es nur, dass man in der Spring-Doku gucken muss, wie man eine Map mit XML befüllt.
Der Wildwuchs an Konfigurationsdateien in der Java-Welt ist eine Seuche! Statt die in vielen problemlos anwendbare und allen Java-Entwicklern vertraute Sprache Java zu verwenden, erfindet jeder Konfigurationsdateischöpfer eine neue Syntax für bestimmte Aufgaben (befüllen von Maps). Deswegen finde ich es schon grundsätzlich gut, auf XML soweit wie möglich zu verzichten.
"I often think that people are over-eager to define configuration files. Often a programming language makes a straightforward and powerful configuration mechanism."
(Martin Fowler)
Da bist du leider zu spät, die XML Konfigurationshölle ist schon vorbei, Spring setzt seit 2.5 mehr auf Annotationen und weniger auf XML, JEE 5 auch.
Wer XDoclet nicht als Erleichterung schätzen gelernt hat, war nie wirklich in der XML konfig Hölle *g*
Hibernate, EJBs2.x, Struts1.x, Spring 2.0.x etc. pp.
Das war die wirkliche XML Konfig Hölle.
Bei Spring gibt es ja auch eine Bewegung weg von XML und hin zu Java-Konfiguration. Bloß wo ist eigentlich der Mehrwert von Spring DI, wenn man Konfigurationen wie die folgende schreibt?
Weniger XML Konfiguration
Mit Spring EL gibt es hier einen bequemen Weg (@Value), auf Konfigurationsdateien zuzugreifen, aber SpringSource hat hier mal wieder das Rad neu erfunden, denn Property-Dateien mit Java auzulesen ist auch nicht schwer. Dann gibt es noch Annotationen wie @DependsOn, womit angegeben werden kann, dass eine Bean auf Seiteneffekte einer anderen Bean angewiesen ist, also eine indirekte Abhängigkeit über die Umgebung besteht. Abgesehen davon, dass die Notwendigkeit dafür auf schlechtes Design hindeuten könnte, könnte man genau solche Abhängigkeiten auch mit Java schreiben.
Schreib doch mal die Konfig mit java Properties, wetten dass es länger wird und schwerer zu warten?
"depends-on" hat übrigens nix mit indirekten Abhängigkeiten zu tun, sondern damit, das Komponenten nunmal Abhängigkeiten von anderen Komponenten haben die erfüllt sein müssen, wenn nicht meldet dir Spring hier ein Fehler, es ist also guter & sauberer Stil Depends-On zu verwenden.
Die Konfiguration als XML zu schreiben ist aus meiner Sicht eher Nachteil als Vorteil und kein Grund ein DI-Framework einzusetzen. Was Spring in der Java-Konfiguration mit Annotationen macht, könnte man genauso gut mit Java pur machen.
Na dann nimm doch "Java Pur", hält dich ja keiner davon ab.
Die Vorteile von Textdateien zur Konfiguration hatte ich oben ja schon erwähnt (Filtering zB.).
Was ist dann also der Vorteil von Spring DI? Ist der eigentliche Vorteil von Spring nicht das, was über DI hinaus geht? Wie etwa Unterstützung bei der Internationalisierung, event-propagation, resource-loading, AOP oder Abstraktion von anderen Frameworks?
Bloß wenn der eigentliche Vorteil von Spring nicht DI ist, welchen Grund gibt es dann, Spring DI einzusetzen?
Spring bietet DI, sehr einfach sogar

Spring bietet aber auch noch viel mehr, schreibst ja selber schon einige Bespiele hin.
Spring DI ist halt immer noch mächtiger als JEE DI, GoogleJuice, PicoContainer, etc. pp.
Wenn dir das reicht was die anderen leisten nimm doch die anderen
Weiss noch nicht wohin du willst mit deiner Argumentation..
contra Spring?
contra XML?
contra DI?