【Spring】便利なアノテーションについて知ろう①

公開日: 2025/3/6

Java開発でフレームワークを使用する際、Springが選ばれることが多いと感じます。

Springで特徴的なのはアノテーションという@を使った記載になります。

そのアノテーションにはどういったものがあるか、どういった意味になるのかを調べてまとめてみました。

1. Springとは


まず一口にSpringといっても「Spring Framework」と「Spring Boot」が存在します。

それぞれの特徴や違いは以下になります。

1.Spring Framework

Spring Frameworkは、Rod Johnsonによって2003年6月に初めてリリースされた、Javaプラットフォーム上で動作するオープンソースのアプリケーションフレームワークになります。

Spring Frameworkは、軽量でモジュール化されたJava EEアプリケーションの開発に適しています。


Spring Frameworkには、DI(Dependency Injection)機能、AOP(Aspect Oriented Programming)機能、MVCフレームワーク、ORM(Object-Relational Mapping)フレームワークなど、様々な機能が提供されています。

これらの機能を使用することで、容易にJavaアプリケーションの開発やテストを実施することができます。

2.Spring Boot

Spring BootはSpring Frameworkの欠点である、機能の使い分けを解消するために作られたフレームワークです。

主な機能として、複数のフレームワークを使用する際に発生する、Bean定義やXML設定などを、可能な限り自動設定する機能が搭載されています。

このほか、コードを書かなくてもプログラムの処理が実行できるよう、Javadocと同じくアノテーション(注釈)が記述できる点も特徴です。

このSpring bootは、Spring MVCと呼ばれる別のフレームワークの仕様を踏襲して作られており、Spring Frameworkを構成するフレームワークの1つとして組み込まれています。

2. アノテーションとは


「アノテーション」は直訳すると「注釈・注記」になります。

Java開発でのアノテーションはコードに注釈として補足を加えることで、プログラムの動作を変更したり、開発時のルールを統一できたり、フレームワークに処理を指示したりできる仕組みです。

アノテーションには以下の種類が存在します。

1.マーカーアノテーション

文字通りクラスやメソッドなどに印を付けるために使うアノテーションです。データを持たせることはできないです。

2.単一値アノテーション

1つのデータを持つアノテーションです。メソッド名にはvalueという名前をつけるのが一般的な慣習になります。

3.フルアノテーション

複数(少なくとも二つ以上)のデータを持つアノテーションです。

4.メタアノテーション

アノテーションに付与するアノテーションです。アノテーションを独自で作る際に、保持や継承のルール等を定義できます。

3. アノテーションを使うメリットデメリット


1.アノテーションを使うメリット

 ・コード量の減少

 ・可読性の向上

2.アノテーションを使うデメリット

 ・どのアノテーションを使用したら良いか判断がつかない

 ・すべて覚える必要はないにしても学習コストがかかる

4. 便利なアノテーション一覧

1.【DIに関するアノテーション】

・@￰Autowired
 使いたいクラスをインスタンス化し、変数に設定してくれるアノテーションです。

・@￰Component
 DIコンテナにBeanとして登録され、@￰Autowiredが付与されたフィールドにインスタンスが注入されます。

・@￰Controller
 クライアントとのデータ入出力を制御する(画面からHTTPリクエストを受け付ける)クラスに付与します。

・@￰Service
 業務ロジックを提供するクラスに付与します。

・@￰Repository
 データベースとのやりとりを行うクラスに付与します。

・@￰Configuration
 アノテーションを使ってのDIコンテナへのBean登録が複雑な場合、JavaConfigと呼ばれるBeanを生成するクラスを作成します。そのJavaConfigに付与するアノテーションです。

・@￰Bean
 @￰Configurationが付与されたJavaConfig内のインスタンスを生成するメソッドに付与するアノテーションです。

<実装例>

@Configuration
public class TeatConfig {

  // TestComponentクラスをDIコンテナに登録する
  @Bean
  public TestComponent testComponent() {
    return new TestComponent();
  }
}

・@￰Scope
 インスタンスの生成・破棄のタイミングを指定するアノテーションです。

<実装例>

@Controller
// HTTPリクエストが送られてくるたびにインスタンスが生成される
@Scope("request")
 public class Sample {
  …
}

・@￰Primary
 優先的にDIを行いたいクラスに付与するアノテーションです。

2.【Controllerに関するアノテーション】

・@￰RestController 
 REST API 用のControllerクラスに付与するアノテーションです。

 クラスにつけることでそのクラス内のメソッドの戻り値がHTTPのレスポンスボディとして返されます。

・@￰RequestMapping
 リクエストURLに対して、どのクラス・メソッドが処理を実行するか定義するアノテーションです。クラスあるいはメソッドに付与します。

 GET・POSTといったHTTPメソッドを指定する「method」属性とURLのパスを指定する「value」属性を指定できます。

<実装例>

 // GETで"http://localhost:8080/sample" にアクセスすると、このメソッドが実行される
@RequestMapping(value = "sample", method = RequestMethod.GET)
 public String sample() {
  return "sample";
}

・@￰GetMapping
 @￰RequestMappingのGETリクエスト用アノテーションです。

・@￰PostMapping
 @￰RequestMappingのPOSTリクエスト用アノテーションです。

・@￰RequestParam
 URLに含まれるクエリパラメータや、リクエストボディに含まれるパラメータを受け取るために使用するアノテーションです。

 下記属性を指定できます。

 name属性・value属性:リクエストパラメータを指定します。nameとvalueの役割に違いはありません。

 required属性:パラメータはデフォルトでは必須になるため、パラメータの指定を任意にする場合、falseを指定します。

 defaultValue属性:リクエストパラメータが指定されなかった時のデフォ