Spring Bootのアノテーションとインタフェースの関係をやさしく解説!
こんにちは。ゆうせいです。
Javaを使って本格的なWebアプリケーションを開発しようとすると、必ず出てくるのがSpring Boot(スプリング・ブート)です。
そしてその中でよく登場するのが、「アノテーション」と「インタフェース」。
この2つの関係って、最初はちょっと分かりづらいんですよね。でも安心してください!
今回は、Spring Bootのアノテーションが何のために使われていて、インタフェースとどう関係しているのかを、高校生でもわかるように例えを交えて説明していきます。
アノテーションってそもそもなに?
アノテーション=「Javaへの指示書」
アノテーションとは、Javaのクラスやメソッド、フィールドなどに「これは特別な意味があるよ」とメタ情報を付けるための仕組みです。
たとえば、Spring Bootではこんなアノテーションがよく出てきます。
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello!";
}
}
これは、「このクラスはWebのリクエストを受け取るコントローラーですよ」とSpringに伝えるための「しるし」です。
イメージで言えば、宅配便の荷物に貼るラベルのようなもの。
中身(クラスやメソッド)は変わらなくても、貼るラベル(アノテーション)によって扱い方が変わるんです。
Spring Bootでよく使うアノテーションとその意味
アノテーション | 意味 |
---|---|
@Component | このクラスはSpringが管理すべき部品(コンポーネント)です |
@Service | サービス層のロジックを持つクラスです(@Component の一種) |
@Repository | データアクセス層(DAO)のクラスです |
@Controller / @RestController | Webのリクエストを受け取るクラスです |
@Autowired | Springに「ここに依存するものを注入して!」とお願いする |
インタフェースとの関係を図で理解!
Spring Bootでは、「インタフェース」と「アノテーション」が一緒に使われる場面がたくさんあります。
たとえば、次のようなコードを見てみましょう。
public interface GreetingService {
String greet(String name);
}
@Service
public class GreetingServiceImpl implements GreetingService {
public String greet(String name) {
return "Hello, " + name;
}
}
@RestController
public class HelloController {
private final GreetingService greetingService;
// コンストラクタで依存性注入
public HelloController(GreetingService greetingService) {
this.greetingService = greetingService;
}
@GetMapping("/greet")
public String greet() {
return greetingService.greet("Spring Boot");
}
}
このコードで起きていることを整理!
GreetingService
はインタフェースです。つまり「仕様書」。GreetingServiceImpl
はそのインタフェースを実装した「中身」。@Service
というアノテーションを付けることで、Springが自動的に管理対象(DIコンテナに登録)にします。HelloController
はそのインタフェースを依存性注入によって受け取ります。
つまりどういう関係?
Spring Bootの中では、以下のような連携が成り立っています。
[インタフェース] ←→ [@Serviceなどで管理された実装クラス]
↑
|
[コントローラーが依存性注入を受ける]
- アノテーションはSpringに「これ使って」と指示するもの
- インタフェースは「どんな機能を持ってるか」の約束
- Springはこの約束に従って、実装クラスを自動的に注入する
例えでイメージ!
「インタフェース=職業名」、「実装クラス=実際の人」、「アノテーション=社員証」
たとえば会社で「エンジニア募集」と書いたポスターがあったとします。
それがインタフェースです。仕様や期待される能力を表しています。
そこに「私はJavaが書けるエンジニアです!」と書いた社員が応募してきます。
それが実装クラスです。
Springは「この人はエンジニア(インタフェース)を満たしてるね」と判断し、@Serviceという社員証があるから採用して、社内で使えるようにしてくれるわけです。
よくある疑問
Q. なぜインタフェースを使うの? 直接クラスでよくない?
A. インタフェースを使うことで、実装の差し替えがカンタンになるからです。たとえば将来的に別のGreetingService
を作ってテスト用に切り替えるのもラクです。
Q. @Autowired
はどこに使うのが正しい?
A. 現在はコンストラクタインジェクション(今回のような形式)が推奨されています。昔はフィールドに@Autowired
を直接付ける方法もよく使われていました。
今後の学習の道しるべ
次のステップとして、以下の内容に進んでみましょう。
- SpringのDIコンテナの仕組み(ApplicationContext)
- Beanのスコープ(singletonやprototypeなど)
- インタフェースを使ったモックの作り方(テスト技法)
- Spring AOP(アスペクト指向)とアノテーションの関係
Spring Bootの魅力は、アノテーションで簡潔に強力な機能を使えることにあります。慣れてくると設計の幅がぐっと広がりますよ。
引き続き、一緒に頑張っていきましょう!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。