2017-09-18 5 views
1

春にサービスまたはコンポーネントを使用する場合春にサービスやコンポーネントを使用する場合

たとえば、電子メールまたは一般的なビジネスロジックに「サービス」または「コンポーネント」を送信するモジュールはありますか? とは何ですか?

サービスは他のサービスを呼び出すことはできますか? トランザクションに問題はありますか?サービスはコンポーネントのみを呼び出す必要がありますか?

サービスは他のサービスを呼び出すべきではなく、代わりにコントローラ - >サービス - >コンポーネント - > DAOを意味するコンポーネントを呼び出すべきだと私に言ったが、多くの人がコントローラ - >サービス - >コンポーネントなしのDAO。

Springのこのトピックに関するシステム設計基準はありますか?

+2

あなたの質問はあまりにも広すぎます。提案重複:https://stackoverflow.com/questions/6827752/whats-the-difference-between-component-repository-service-annotations-in –

答えて

3

を使用する必要があります。これを行うには、xml構成ファイルまたはアノテーションを使用できます。

アノテーションアプローチ(より良い、より単純なもの)を使用する場合は、@Componentを使用してクラスに注釈を付けることができます。これは春を伝えるようなものです。「ねえ、このクラスのインスタンスが必要かもしれないことを知りたがっています。だから、これは@Componentちょうど春にはそれが存在することを知っているクラスに注釈を付ける

同じやる他の注釈があります

  • @Controller(および@RestController
  • @Service
  • @Repository

彼らはすべてクラスにDIコンテキストに関与していることをSpringに通知します。 しかしもセマンティックな意味を持っている:

プレゼンテーション層へサービス/ユースケースレイヤー永続層へ に属する
  • @Repository = @Componentに属する
  • @Service = @Componentに属する
    • @Controller = @Component

      詳細はthis question

      です

      サービスは他のサービスを呼び出すことができますか?

      私はそれで何の問題が表示されません。あなたのサービスのいずれかが既に他の人によって実行されているいくつかのアクションを実行する必要がある場合は、確実にコードの複製を避けたいと思っています。限り、アーキテクチャの層の依存性(決して上がる)を尊重する限り、あなたは大丈夫でしょう。

      これについてはthis articleについてご確認ください

  • 2

    @Componentは、他のステレオタイプでは一般的です。
    @Repository, @Service, @Controller@Componentに置き換えても何も変わりません。それはあなたがあなたを必要とするクラスのインスタンスを提供することができますので、しかし、読みやすくするためにあなたがインクルードが構築されている方法を春オブジェクトが関与しているものを伝えることになっている春の「設定」するためには@Repository, @Service, @Controller

    +0

    正確に真実ではありません。 '@ Repository'はデータベースに特有の例外処理を追加します。他の注釈は何も追加しませんが、それは時間の問題です。将来的には追加がある可能性があります。 –

    関連する問題