2016-05-31 5 views
3

MVCパターンでは、主に4つのクラスがあります。コントローラー、サービス、サービスのインプットとレポ。サービスインタフェースとサービスimplクラスのコードアーキテクチャspring

サービスはインターフェイスであり、サービスインプリメンテーションはサービスクラスであり、すべての論理コードを含んでいます。構造は次のようになります: -

Serviceインタフェースクラス

Service{ 

public void someMethod(); 

} 

ServiceImplクラス

ServiceImpl implements Service{ 
    public void someMethod(){ 
    //do something 

    }  
} 

しかし、我々は、コントローラからサービスのimplコードにアクセスしたいとき、我々はサービスのメソッドを呼び出しますクラスとして: -

@Autowired 
Service service; 

Object obj = service.someMethod(); 

どのようにコントローラがServiceImplクラス

答えて

4

これのコードを実行しない春がどのように機能するかを基本的に次のとおりです。サービスの実装はのSpring Beanである必要があり

(それは@Component@Service注釈を持たなければならない、または規定されるべきであるのいずれかSpringのXML設定ファイル)、Springがそれを見つけてSpringアプリケーションコンテキストに登録するようにします。

次に、@Autowiredアノテーションによって依存関係注入を使用して、サービスの実装をコントローラに注入します。これは、Springがあなたのコントローラを見て、serviceメンバ変数の@Autowired注釈を見つけて、アプリケーションコンテキストで見つかったBeanで初期化します。これは、以前に登録したサービス実装クラスのインスタンスになります。したがって、Springが完了した後、serviceServiceImplのインスタンスを参照します。

依存性の注入は、春にどのように機能するかについては、Springフレームワークリファレンスドキュメントを参照してください:The IoC container

+0

複数のクラスで 'Service'インターフェースを実装するとどうなりますか?誰の実装コードが実行されますか? – viper

+1

'Service'を実装している複数のSpring Beanがある場合、Springはどのアプリケーションを選択するのかわからないため、アプリケーションの起動時にエラーが発生します。どのようなものをSpringに伝えるかは、 '@ Qualifier'や' @ Primary'を使うなどの方法があります。 – Jesper

+0

回答ありがとうございました。しかし、なぜ春はそのようなパターンを使用していますか?私は通常の 'mvc'パターンでは、インタフェースクラスの必要な役割はないと思います。 'ServiceImpl'クラスにいくつかのメソッドを実装させるだけです。 – viper

1

アノテーション@Autowiredを使用すると、春は自動的にそのアプリケーションコンテキストで中に注入される候補を検索しますコントローラ。有効な候補は、注釈@Serviceなどを使用してSpring Beanとしてマークされた具象クラスでなければなりません。

0

このようなアーキテクチャーの背景にある基本的な考え方は、春季大会とは少し異なります。サービス ため

残したいいけない、あなたが決める明日を言うことができます両方のプロジェクトのための単一のアプリケーションを持っている、そしてWebアプリケーションのための1話の展開に入り、別の例 UserServiceの WebAppの

ので、WebAppのは、UserServiceのに接続するためにあらゆる種類のデータを取得するためにhttp要求を作成する必要があります。 WebAppのすべてのコードを変更して、新しい変更と互換性を持たせる必要があります。たとえば、serviceのメソッドを直接呼び出す代わりに、httpClientを呼び出します。このリワークを避けるには、インターフェイスサービスを使用して独自のServiceImplを実装し、すべてのhttp要求をその残りの部分にそのまま残します。残りはそのまま残ります。

UserServiceで同様の処理が行われますが、これは以前と同じようにServiceImplを持ちますが、Controllerではシングルトンオブジェクトとして呼び出されます。

関連する問題