【Spring Boot】@Component / @Service / @Repository の違いをやさしく解説

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

Spring を使っているとよく見かける
@Component / @Service / @Repository
という 3 つのアノテーション。

どれも「Bean を登録するためのもの」という理解はあるけれど、
「結局どう違うの?」 「どれを使えばいいの?」 と迷うこともあると思います。

この記事では、この 3 つのアノテーションの違いを やさしく・実務で役立つ形 で整理していきます。

まずはコードを見て、そこから少しずつ理解していきましょう。

まずはコードを確認

Java
@Component
public class SimpleComponent {
    public String message() {
        return "Hello from Component";
    }
}

@Service
public class GreetingService {
    public String greet() {
        return "Hello from Service";
    }
}

@Repository
public class UserRepository {
    public String findUser() {
        return "User data";
    }
}

どれも Bean として登録されますが、
実はそれぞれに“役割のイメージ”があります。

コードのしくみを解説

@Component

一言でいうと、

「汎用的なコンポーネント」

特定の役割を持たない、
「とりあえず Bean にしたいクラス」につけるアノテーションです。

  • ユーティリティクラス
  • 設定クラス
  • どの層にも属さないクラス

などに使われます。

@Service

一言でいうと、

「ビジネスロジックを担当するサービス層」

業務処理やアプリケーションの中心となる処理をまとめる場所です。

  • 計算処理
  • ドメインロジック
  • 外部 API 呼び出しの調整

など、アプリの“頭脳”にあたる部分を担当します。

@Repository

一言でいうと、

「データアクセス層」

DB とのやり取りを担当するクラスにつけます。

  • SQL 実行
  • JPA の操作
  • データ取得・保存

など、データの出入りを扱う層です。

Spring は @Repository に特別な機能を持たせており、 例外を Spring 独自の DataAccessException に変換してくれます。

あわせて知っておきたいポイント

どれも最終的には @Component

@Service や @Repository は
@Component の派生アノテーション です。

つまり、どれを付けても Bean として登録されます。

違いは「役割の明確化」

実務では、アノテーションの違いが
コードの読みやすさや設計の整理につながります。

  • @Service → 業務処理
  • @Repository → データアクセス
  • @Component → その他

という役割分担が自然に生まれます。

Spring の自動処理が変わることもある

特に @Repository は例外変換が行われるため、
DB 操作を行うクラスには積極的に付けるべきです。

使うときに気をつけたいこと

なんでも @Component にしない

役割が曖昧になると、
後からコードを読む人が困ります。

@Service と @Repository を正しく使う

層を意識した設計にすることで、
テストしやすく、変更に強い構造になります。

パッケージ構成と合わせるとより効果的

controller
service
repository
という構成にすると、
アノテーションの意味がより生きてきます。

まとめ

@Component / @Service / @Repository は、
どれも Bean を登録するためのアノテーションですが、
それぞれに“役割のイメージ”があります。

  • @Component → 汎用的なコンポーネント
  • @Service → ビジネスロジック
  • @Repository → データアクセス

難しく考えすぎず、
「どの層のクラスなのか」
を意識して使い分ければ十分です。


decopon
decopon

アノテーションの違いは最初わかりにくいですが、
役割を意識して使い分けるだけでコードがぐっと読みやすくなります。
あなたの開発が、今日より少しだけ楽になりますように。

moco
moco

アノテーションって、クラスに“名札”をつけてあげるみたいだね。役割がわかると安心するよね。

コメント

タイトルとURLをコピーしました