[解決済み] Serviceアノテーションはどこにつけるべきですか?インターフェースか実装か?
質問
Springを使ってアプリケーションを開発しています。その際
@Service
アノテーションを使用します。私は
ServiceI
と
ServiceImpl
そのような
ServiceImpl implements ServiceI
. をどこに置けばいいのか、ここで混乱しています。
@Service
アノテーションを使用します。
インターフェースと実装のどちらをアノテーションするかは
@Service
? この2つのアプローチの違いは何ですか?
どのように解決するのですか?
私は一度も
@Component
(または
@Service
というのも、これはインターフェイスを無意味にしてしまうからです。その理由を説明しましょう。
請求項1: もしインターフェイスがあるなら、射出ポイントの型にそのインターフェイスを使いたい。
請求項2
インターフェイスの目的は、複数の実装が可能なコントラクトを定義することです。一方、インジェクションポイント(
@Autowired
). 1つのインターフェースとそれを実装する1つのクラスしか持たないというのは、(IMHO)無駄であり、以下のような違反になります。
ヤグニ
.
の事実があります。 置くと。
-
@Component
(または@Service
というように、インターフェイスで - それを実装しているクラスが複数ある。
- 少なくとも2つのクラスがSpring Beansになり、かつ
- 型ベースのインジェクションのためのインターフェイスを使用するインジェクションポイントを持つ。
とすると
NoUniqueBeanDefinitionException
(または、環境、プロファイル、修飾子など、非常に特殊な設定をしている場合...)
おわりに
を使用する場合
@Component
(または
@Service
の2つの条項のうち、少なくとも1つに違反する必要があります。ですから、私は、(稀なシナリオを除いて)
@Component
をインターフェイスレベルで使用します。
Spring-Data-JPAのリポジトリインターフェースは全く別のものです。
関連
-
[解決済み] org.springframework.web.servlet.PageNotFound noHandlerFound URIを持つHTTPリクエストのマッピングが見つからない。
-
[解決済み] ApplicationContextException: ServletWebServerApplicationContext が見つからないため、ServletWebServerFactory ビーンを起動できません。
-
[解決済み] Transactionalアノテーションはどこに属しますか?
-
[解決済み] Spring MVCの@ResponseBodyメソッドがStringを返すときにHTTP 400エラーで応答するにはどうすればよいですか?
-
[解決済み】SpringのApplicationContext.getBeanがダメだと言われる理由とは?
-
[解決済み】BeanFactoryとApplicationContextの比較
-
[解決済み】ビーン初期化完了後にメソッドを呼び出すには?
-
[解決済み】Spring @Autowire プロパティとコンストラクタの違いについて
-
[解決済み] Spring.jpa.hibernate.ddl-autoプロパティは、Springで具体的にどのように動作しますか?
-
[解決済み】Spring SecurityのRoleとGrantedAuthorityの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Spring Hibernate - 現在のスレッドのトランザクション同期セッションを取得できませんでした。
-
[解決済み] 復旧しようとする宛先のJMSメッセージリスナー起動者のセットアップに失敗しました。
-
SpringトランザクションとMySQLトランザクション詳細インタビュー
-
ERROR StatusLogger Log4j2 の設定ファイルがテストに表示されない
-
SLF4J:クラスパスに複数のSLF4Jバインディングが含まれる問題 解決済み
-
レスポンスボディとレスポンスエンテイティ
-
[解決済み] WebApplicationContext が見つかりません: ContextLoaderListener が登録されていませんか?
-
一致するビーンは1つだと思ったが、2つ見つかった:onedbJdbcTemplate,twodbJdbcTemplate
-
[解決済み] 春です。なぜ実装されたクラスではなくインターフェイスを自動配線するのか?
-
[解決済み] Spring Expression Language (SpEL) と @Value: ドル vs. ハッシュ ($ vs. #)