はじめに
Spring を使っているとよく見かける
@Component / @Service / @Repository
という 3 つのアノテーション。
どれも「Bean を登録するためのもの」という理解はあるけれど、
「結局どう違うの?」 「どれを使えばいいの?」 と迷うこともあると思います。
この記事では、この 3 つのアノテーションの違いを やさしく・実務で役立つ形 で整理していきます。
まずはコードを見て、そこから少しずつ理解していきましょう。
まずはコードを確認
@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 → データアクセス
難しく考えすぎず、
「どの層のクラスなのか」
を意識して使い分ければ十分です。

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

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

コメント