MVCパターンが適用されたスイングGUIアプリケーションで、Springを使用してモデルビューとコントローラを結ぶ方法を教えてください。すなわち、どの豆(モデル、ビューまたはコントローラ)を春に注入すべきか、およびアプリケーションから何を作成すべきか?アプリケーションを開発するときに、hereというMVCパターンを適用しました。前もって感謝します。Springを使用してモデルビューとコントローラを配線する方法
答えて
私はすべてのBeanを春に定義し、必要に応じてファクトリメソッドを使用してビューを作成しました。コントローラがビューに挿入され、モデルとビューがスプリングを介してコントローラに追加されます。
解決策を見つけるために私が思いついた簡単な例のコードサンプルを以下に示します。(長いポストは申し訳ありません!)
アプリケーション・コンテキスト・ファイル:
<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>
以下抽象コントローラクラスである:以下
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();
}
}
}
}
は、抽象モデルクラスである:後
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);
}
}
は、コードサンプルであります表示インターフェイスの種類:
以下の0public interface BaseView {
void modelPropertyChange(PropertyChangeEvent evt);
public abstract void showForm();
}
ファクトリクラスのコードサンプルです:
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;
}
}
私のプロジェクトでは、Spring Rich Clientを成功裏に使用しました。
初心者であれば、それを見てみることをお勧めします。また、(認証ボックスなどの)いくつかのサービスをそのまま提供します。
使用しているテクノロジに余裕があるなら、(Griffon)[http://griffon.codehaus.org/]に切り替えるといいでしょう。これはバックグラウンドで春を使用し、GroovyとSwing UIビルダーの力を得ることもできます。最も重要な点は、これまでに書いたJavaコードを再利用できることです。また、DIやものについて心配する必要はありません。グリフォンはあなたのためにそれを処理します。
"spring mvc"を使用することをお勧めします。
Jsp(View)コントローラデータの表示方法。
コントローラの制御はビューの必要なデータを返します。
サーバコントローラシステムロジック。
モデルはデータベースモデルです。
これはデスクトップアプリケーションです。春のMVCはWebアプリケーションでのみ使用できます。 –
グリフォンを見てみることをお勧めします。 MVCパターンは、グリフォンは、各MVCメンバーのための基本的なDI機能を提供グリフォンガイド
に示すようこのサンプルアプリを見て、あなただけの次のプロパティを定義する必要があり、グリフォンのDNAに深くengrainedです命名規則。ガイドは、あなたも春のプラグインを介して、春のDIを利用することができますしかし
に説明しているようにあなたは通常、アプリケーションのロジックのほとんどを置くサービスも、自動的に、コントローラに注入されている
http://artifacts.griffon-framework.org/plugin/spring
Spring Beanは、標準のXMLアプローチ、注釈、またはGroovy Spring DSLを使用して定義できます。
- 1. Spring Beans - コンストラクタargとしてnullを配線する方法は?
- 2. Springを使用してGoogle App EngineのUserServiceFactoryを配線する
- 3. Ajaxを使用してLongとDoubleをSpringコントローラに送信する方法は?
- 4. Springでコンストラクタとプロパティを自動配線する方法
- 5. コントローラからディレクティブに関数を配線する方法
- 6. Spring-mvcでアンカータグを使用してコントローラを呼び出す方法は?
- 7. Springプロファイルを使用してSpringジョブを構成する方法
- 8. Springを使用した自動配線時のBeanの作成
- 9. JAXBとSpring @ ResponseBodyをコントローラで使用して正しいサイトマップ名前空間を生成する方法は?
- 10. 水線:ANDを要素として使用するクエリ配列
- 11. Springを使用してMongodbドキュメントの配列をフィルタリングする方法
- 12. jQueryを使用して要素を曲線として配置する方法.each()
- 13. Springを使用してMySQLを使用する方法とHSQLDBを現在使用しているHibernateのバックグラウンド
- 14. Spring Beanの配線
- 15. "*"を使用して線を描画する方法
- 16. Matplotlibを使用して線グラフを作成する方法
- 17. ハイチャートを使用して単線グラフを描画する方法
- 18. コントローラを使用してextjs4のメニューを制御する方法
- 19. ルートネームスペースを使用してコントローラをグループ化する方法Laravel
- 20. angularjsのコントローラを使用してフォームを検証する方法
- 21. knockout.jsを使用してMVCコントローラを移動する方法は?
- 22. button_toを使用してコントローラのメソッドをアクティブにする方法
- 23. Apache POIを使用して線グラフにグリッド線を追加する方法
- 24. spring mvcを使用してコントローラで読み取り専用フィールド値を取得する方法。
- 25. ルビーは、コントローラの機能にドットを使って配線しています。
- 26. Springタスクをエクスポートする方法:executorをmbeanとして使用しますか?
- 27. webrequestを使用してJson配列を使って折れ線グラフをプロットする方法
- 28. Spring 3.0.5を使用してLDAPサーバーを接続する方法
- 29. Spring JDBCを使用してレコードを取得する方法
- 30. SpringのRestControllerを使用してJSONをモデル化する方法
は、[スイング*を使用して春に*はじめに](http://www.ibm.com/developerworks/java/tutorials/も参照してください。 j-スプリングスイング/)。 – trashgod
@trashgod、リンクありがとうございますが、これは私が探しているものではありません。 Swingを使用したSpring入門記事では、表モデルのようなスイングコンポーネントのモデルでBeanをワイヤリングする方法についての情報を提供しています。モデルがドメインオブジェクトであり、コントローラがビジネスを行うより分離されたMVCにDIを適用する方法論理。 –
まず第一に、あなたはどのバージョンのスプリングを使用できますか?このような情報は、あなたのmvcアプリケーションの記述方法に違いがあるため、役立ちます。 –