In einer Swing-GUI-Anwendung, in der das MVC-Muster angewendet wird, wie können wir die Modellansicht und den Controller mit Spring verbinden? d. h., welche Bohnen (Modell, Ansicht oder Controller) sollten mithilfe der Feder injiziert werden und was sollte aus der Anwendung erstellt werden? Ich habe das MVC-Muster here bei der Entwicklung der Anwendung angewendet. Danke im Voraus.So verkabeln Sie Modellansicht und Controller mit Spring
Antwort
Ich habe alle Bohnen im Frühjahr definiert und eine Factory-Methode verwendet, um die Ansichten bei Bedarf zu erstellen. Der Controller wird in die Ansicht injiziert, und das Modell und die Ansicht werden über die Feder dem Controller hinzugefügt.
Im Folgenden sind die Codebeispiele aus einem einfachen Beispiel, das ich gefunden habe, um eine Lösung zu finden: (Entschuldigung für die lange Post!)
die Anwendungskontext-Datei:
<bean id="firstModel" class="com.model.FirstModel"></bean>
<bean id="secondModel" class="com.model.SecondModel"></bean>
<bean id="firstController" class="com.controller.FirstController" />
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject">
<ref local="firstController" />
</property>
<property name="targetMethod">
<value>addModel</value>
</property>
<property name="arguments">
<list>
<value>FIRST</value>
<ref local="firstModel" />
</list>
</property>
</bean>
<bean id="secondController" class="com.controller.SecondController" />
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject">
<ref local="secondController" />
</property>
<property name="targetMethod">
<value>addModel</value>
</property>
<property name="arguments">
<list>
<value>SECOND</value>
<ref local="secondModel" />
</list>
</property>
</bean>
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject">
<ref local="secondController" />
</property>
<property name="targetMethod">
<value>addModel</value>
</property>
<property name="arguments">
<list>
<value>FIRST</value>
<ref local="firstModel" />
</list>
</property>
</bean>
<bean id="firstForm" class="com.view.FirstForm">
<property name="controller">
<ref bean="firstController" />
</property>
</bean>
<bean id="secondForm" class="com.view.SecondForm">
<property name="controller">
<ref bean="secondController" />
</property>
</bean>
folgende ist die abstrakte Controller-Klasse:
public class AbstractController implements PropertyChangeListener {
Map<Type, BaseView> registeredViews;
Map<Type, AbstractModel> registeredModels;
public AbstractController() {
registeredViews = new HashMap<Type, BaseView>();
registeredModels = new HashMap<Type, AbstractModel>();
}
public void addModel(Type type, AbstractModel model) {
registeredModels.put(type, model);
model.addPropertyChangeListener(this);
}
public void removeModel(AbstractModel model) {
registeredModels.remove(model);
model.removePropertyChangeListener(this);
}
public void addView(BaseView view, Type type) {
registeredViews.put(type, view);
}
public void removeView(javax.swing.JFrame view) {
registeredViews.remove(view);
}
public void propertyChange(PropertyChangeEvent evt) {
for (BaseView view : registeredViews.values()) {
view.modelPropertyChange(evt);
}
}
protected void setModelProperty(String propertyName, Object newValue) {
for (AbstractModel model : registeredModels.values()) {
Statement statment = new Statement(model, "set" + propertyName, new Object[] { newValue });
try {
statment.execute();
} catch (NoSuchMethodException e) {
continue;
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
finden Sie die abstrakte Modellklasse:
public class AbstractModel {
protected PropertyChangeSupport propertyChangeSupport;
public AbstractModel() {
propertyChangeSupport = new PropertyChangeSupport(this);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
}
}
Es folgt das Codebeispiel der Ansichtsschnittstelle:
finden Sie das Codebeispiel der Factory-Klasse:
public class FormFactory {
private ApplicationContext context;
private static FormFactory viewFactory;
private FormFactory() {
if (context == null) {
context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
}
}
public static synchronized FormFactory getInstance() {
if (viewFactory == null) {
viewFactory = new FormFactory();
}
return viewFactory;
}
public BaseView createForm(Type type) {
BaseView form = null;
switch (type) {
case FIRST:
form = (BaseView) context.getBean("firstForm");
break;
case SECOND:
form = (BaseView) context.getBean("secondForm");
break;
default:
break;
}
return form;
}
}
Bei einem meiner Projekte habe ich erfolgreich Spring Rich Client verwendet.
Wenn Sie bei Null beginnen, schlage ich vor, dass Sie es sich anschauen, es lohnt sich. Und es bietet auch einige Dienste aus der Box (wie Authentifizierungsbox und so).
Wenn Sie etwas Spielraum in den Technologien haben, die Sie verwenden, würde ich sagen, dass Sie zu (Griffon) wechseln [http://griffon.codehaus.org/]. Es verwendet Frühling im Hintergrund und Sie erhalten auch die Kraft von groovy und Swing UI-Builder. Der beste Teil ist, dass Sie den Java-Code, den Sie bisher geschrieben haben, immer noch verwenden können. Außerdem müssen Sie sich nicht um DI und solche Sachen sorgen. Griffon behandelt es für Sie.
Ich schlage vor, dass Sie "Federmvc" verwenden können.
Jsp (View) Controller, wie die Daten angezeigt werden;
Controller Kontrolle der Rückkehr der Ansicht erforderlichen Daten;
Server-Controller die Systemlogik;
Modell ist das Datenbankmodell.
Dies ist eine Desktop-Anwendung, Feder MVC kann nur in Web-Anwendungen verwendet werden. –
Es würde niemanden überraschen, dass ich Ihnen empfehlen würde, sich Griffon anzuschauen. Das MVC-Muster ist tief in Griffon DNA engrained, haben einen Blick auf dieses Beispiel-App wie im Griffon Führer
gezeigtGriffon Grund DI-Funktionen für jedes MVC Mitglied bietet, müssen Sie nur Eigenschaften definieren folgende ein Namenskonvention. Dienstleistungen, wo Sie in der Regel die meisten der Logik setzen würde der Anwendung, werden ebenfalls automatisch in Controller injiziert, wie die Führung in
erklärt auch immer Sie den Einsatz von Spring DI auch über den Frühling Plugin
machenhttp://artifacts.griffon-framework.org/plugin/spring
Spring-Beans können mit dem Standard-XML-Ansatz, Annotationen oder Groovy Spring DSL definiert werden.
- 1. C# Modellansicht Controller
- 2. modellansicht controller listview schnittstellenabfrage
- 3. So verkabeln Sie SailsJS mit BreezeJS
- 4. Modellansicht Controller in Grails mit aus Datenbank-Backend?
- 5. ServiceStack und MVC4 nicht verkabeln
- 6. So mappen Sie mehrere Controller in Spring MVC
- 7. So überprüfen Sie die Anforderungsparameter im Spring REST-Controller
- 8. Spring Rest Controller und Paging
- 9. Spring-mvc-Controller und Ausnahmebehandlung
- 10. Spring MVC-Controller HTTP GET-Abfrageparameter
- 11. Zwei Modellansicht Designs und Kommunikation zwischen Modellen
- 12. MVC Wechsel von einer Modellansicht zu einer anderen Modellansicht
- 13. So konfigurieren Sie Spring 4.0 mit Spring-Boot- und Spring-Sicherheit openId
- 14. So laden Sie Eigenschaften mit Spring?
- 15. So behandeln Sie leeren Ergebnissatz mit Ruhezustand und Spring Boot
- 16. So aktivieren Sie Stapeleinfügungen mit Hibernate und Spring Boot
- 17. So behandeln Sie mehrere Touch mit Navigation Controller und ViewController
- 18. So integrieren Sie Spring Security mit dotCMS
- 19. Spring Controller Return-Ansicht und JSON Together
- 20. Proxyquire, verkabeln, SandboxedModule und Sinon: Vor-und Nachteile
- 21. Spring Controller Validieren Anfrage
- 22. Spring Boot und Controller in importierten Modulen
- 23. Vorteile und Nachteile der Verwendung von MVC Design Pattern (Modellansicht Controller)
- 24. Spring Nicht-Singleton-Controller
- 25. So verwenden Sie send.redirect() während der Arbeit mit Spring MVC
- 26. So rufen Sie die Spring Controller-Methode mit @RequestBody vom JUNIT-Testfall
- 27. So erhalten Sie das Pojo-Klassenobjekt "Employee" in der Controller-Klasse mit der Anmerkung "Spring 4"
- 28. So testen Sie Spring @Scheduled
- 29. UTF-8-Codierung mit Formular Post und Spring Controller
- 30. So senden Sie Spring-Formular in Ajax (jquery) mit ModelAttribute
Siehe auch [* Einführung Schaukel * zum Frühling mit] (http://www.ibm.com/developerworks/java/tutorials/ J-Springschwingen /). – trashgod
@trashgod, danke für den Link, aber das ist nicht was ich suche. Die Einführung in Spring mit dem Artikel Swing bietet Informationen zum Verdrahten von Beans in Swing-Komponentenmodellen wie Tabellenmodellen ... Was ich verstehen muss, ist, wie man DI in einer separaten MVC anwendet, wo Modelle Domain-Objekte sind und die Controller Geschäfte machen Logik. –
vor allem, welche Version von Frühling dürfen Sie verwenden? Solche Informationen helfen, da es Unterschiede gibt, wie Sie Ihre mvc-Anwendung in Abhängigkeit davon schreiben. –