4

MVCパターンが適用されたスイングGUIアプリケーションで、Springを使用してモデルビューとコントローラを結ぶ方法を教えてください。すなわち、どの豆(モデル、ビューまたはコントローラ)を春に注入すべきか、およびアプリケーションから何を作成すべきか?アプリケーションを開発するときに、hereというMVCパターンを適用しました。前もって感謝します。Springを使用してモデルビューとコントローラを配線する方法

+0

は、[スイング*を使用して春に*はじめに](http://www.ibm.com/developerworks/java/tutorials/も参照してください。 j-スプリングスイング/)。 – trashgod

+0

@trashgod、リンクありがとうございますが、これは私が探しているものではありません。 Swingを使用したSpring入門記事では、表モデルのようなスイングコンポーネントのモデルでBeanをワイヤリングする方法についての情報を提供しています。モデルがドメインオブジェクトであり、コントローラがビジネスを行うより分離されたMVCにDIを適用する方法論理。 –

+0

まず第一に、あなたはどのバージョンのスプリングを使用できますか?このような情報は、あなたのmvcアプリケーションの記述方法に違いがあるため、役立ちます。 –

答えて

0

私はすべての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); 
}  
} 

は、コードサンプルであります表示インターフェイスの種類:

以下の0
public 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; 

} 
} 
1

私のプロジェクトでは、Spring Rich Clientを成功裏に使用しました。

初心者であれば、それを見てみることをお勧めします。また、(認証ボックスなどの)いくつかのサービスをそのまま提供します。

2

使用しているテクノロジに余裕があるなら、(Griffon)[http://griffon.codehaus.org/]に切り替えるといいでしょう。これはバックグラウンドで春を使用し、GroovyとSwing UIビルダーの力を得ることもできます。最も重要な点は、これまでに書いたJavaコードを再利用できることです。また、DIやものについて心配する必要はありません。グリフォンはあなたのためにそれを処理します。

0

"spring mvc"を使用することをお勧めします。

Jsp(View)コントローラデータの表示方法。

コントローラの制御はビューの必要なデータを返します。

サーバコントローラシステムロジック。

モデルはデータベースモデルです。

+0

これはデスクトップアプリケーションです。春のMVCはWebアプリケーションでのみ使用できます。 –

0

グリフォンを見てみることをお勧めします。 MVCパターンは、グリフォンは、各MVCメンバーのための基本的なDI機能を提供グリフォンガイド

に示すよう

http://griffon.codehaus.org/guide/0.9.5-rc2/guide/2.%20Getting%20Started.html#2.3%20A%20Groovy%20Console%20Example

このサンプルアプリを見て、あなただけの次のプロパティを定義する必要があり、グリフォンのDNAに深くengrainedです命名規則。ガイドは、あなたも春のプラグインを介して、春のDIを利用することができますしかし

http://griffon.codehaus.org/guide/0.9.5-rc2/guide/8.%20Controllers%20and%20Services.html#8.2%20Services

に説明しているようにあなたは通常、アプリケーションのロジックのほとんどを置くサービスも、自動的に、コントローラに注入されている

http://artifacts.griffon-framework.org/plugin/spring

Spring Beanは、標準のXMLアプローチ、注釈、またはGroovy Spring DSLを使用して定義できます。

関連する問題