Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Einsatz von Spring zusammen mit klassischem MVC + Swing
Wir wollen bei einer bestehenden Desktop-Application, welche anhand des MVC-Pattern und Swing entwickelt wurde, Spring einsetzen um View, Model und Controller über die Spring-XML-Konfiguration austauschbar zu machen.
Allerdings bekomme ich da Probleme mit "Circular References", da der Controller ja die View kennt und die View den Controller (als Interface), und das scheint Spring gar nicht zu mögen.
Sollte man Spring für ein solches Szenarion überhaupt verwenden?
Ich habe das MVC jetzt so abgeändert, dass es für unsere Zwecke passt. Allerdings glaube ich dass sich hier ein MVP am besten machen würde. Durch die "Circular References" ist ein klassisches MVC mit Spring, meiner Meinung nach, einfach nicht in Einklang zu bringen.
Ich glaube eher dass "Circular References" ein Problem von Spring im Zusammenhang mit "klassischem MVC" sind, denn:
Java:
public class Controller implements IController{
private IView view;
private IModel model;
public Controller(IView view, IModel model){
this.view = view;
this.model = model;
((Observable)model).addObserver(view);
}
public void userInput(String input){
model.loadFromDatabase(input);
}
...
}
Java:
public class View extends JPanel implements IView, Observer{
private IController controller;
public View(IController controller){
this.controller = controller;
}
public void update(Observable o, Object arg) {
...
}
}
...
}
Java:
public class Model extends Observable implements IModel{
public Model(){
}
public loadFromDataBase(String name){
...
changed();
notifyObservers();
}
}
Das ist, was ich unter der klassischen Struktur eines MVC's verstehe.
Und wenn ich jetzt mit Spring eine Context hierfür erstelle, würde die so aussehen:
Solch ein Konstrukt ergibt eine "Circular Reference" in Spring. (Habe das Beispiel jetzt nicht getestet, da es von mir jetzt einfach nur hingehackt worden ist).
Musste jetzt nochmal nachsehen was Sun/ORacle genau mit "classical MVC" meinten (es gibt wohl mehr MVC Interpretationen als Implementierungen haben hier regelmässig Diskussionen deswegen), solange die Abhängigkeiten von konkreten Klassen nur aus Interfaces bestehen, sollte es ja keine zirk. Abhängigkeiten zwischen Implementierungen geben, oder stehe ich gerade auf dem Schlauch?
Innerhalb von Spring müssen konkrete Beans oder Klassen angegeben werden(?), und da nutzen ja leider dann auch keine Interfaces. Und da hier eine Bean die andere referenziert, versucht Spring Bean A zu instanzieren, sieht aber dass es dazu b braucht. B wiederum braucht aber A und genau damit kann Spring wohl nicht umgehen!?
Da ich kein Spring-Experte bin, weiss ich jetzt nicht 100%ig ob meine Aussage hier stimmt.
IME gibt es eine Möglichkeit das Spring damit klarkommt, Setterinjection anstatt Constructorinjection, damit können die Objekte nämlich erzeugt werden, danach konfiguriert/injiziert.