Springのアノテーションについて

Javaウェブアプリ開発

Springのアノテーションとは

「アノテーションはクラスやインターフェースをbeanというオブジェクトにして、
そのオブジェクトを使いたいところで使う」というSpringフレームワークで使える便利な機能です。

アノテーションの種類はたくさんありますが、大きく分けて2種類あります。

①アノテーションが付与されたモノをSpringのDIコンテナにbeanとして登録するアノテーション
例としては
@Controller
@Service
・@Component
・@Repository

②bean化したオブジェクトを注入するアノテーション
例としては
・@RequestMapping
・@Autowired
・@NotNull

 

①beanという箱に詰めるのか ⇒ オブジェクト化する(Input)
②詰めた箱から情報を取り出すのか ⇒ オブジェクトを使いたいところで使う(Output)

「SpringのDIコンテナにbeanとして登録する」って何?

DIコンテナとは?

DIとは「Dependency injection」の略で、日本語では「依存性の注入」です。
依存性の注入といわれてもよくわからないので、英語版のWikiではこう書かれていました。

>A dependency is an object that can be used (a service).

つまりDIとは依存性の注入ではなくて、オブジェクトの注入と理解したほうが分かりやすいです。

DIコンテナとは、そういったオブジェクトの集まりです。

 

beanとして登録するとは

@Controller
@Service
・@Component
・@Repository

などのアノテーションはクラス宣言の上に書かれます。
1つ目役割として、SpringフレームワークがどのクラスがControllerなのか、
Serviceなのかを判断するためにあります。

2つ目の役割として、このアノテーションを書かれたクラスを
Springフレームワークの内部でオブジェクト化してDIコンテナに格納します

これをbeanとして登録すると表現します

 

beanを使う

先ほどオブジェクト化したものをDIコンテナに格納するという方法は理解して頂いたと思います。

今度はその格納したbeanを使うためのアノテーション

・@RequestMapping
・@Autowired

@NotNull

について解説をします。

@Autowiredはインスタンス宣言の上に書かれます。
普通インスタンスを作る際にnewを行いますが、このアノテーションは
newをせずオブジェクト化されたクラスのインスタンスを使いたいクラスに注入します。

 

@RequestMapはSpringフレームワークが提供するアノテーションで
このアノテーションを使うとRequestMappingインターフェースが使えるようになります。

このようにvalueを設定すると、JSPでサブミットされたURLと紐づけることができます。

 

@NotNullも同じくSpringフレームワークが提供するアノテーションです。
このアノテーションを使うとNotNullインターフェースが使えるようになります。
Form.javaで設定しているエンティティにこのアノテーションをつけると、画面入力がその項目に対してされなかった場合、ヴァリデーションエラーと扱ってくれます。

 

@Autowiredのように自分で作ったbean(オブジェクト)を使うものもあれば
@RequestMapや@NotNullのようにSpringフレームワークが提供してくれるbeanを使うアノテーションもある。

 

どのようにフレームワークに認識されるのか

servlet-context.xmlの解説で登場した、サーバーをスキャンする1行があります。

base-packageで定義したパス以下を読み取るようになっています。

 

このパス以下にcontrollerクラスがあって、その中でクラス宣言の上に@Controllerと書いていたら
Springフレームワークは、そのクラスをコントローラだと認識します。

 

@Serviceも@Compornentも@Repositoryも同じようにSpringフレームワークが認識して、beanオブジェクトに詰め込みます。

そして、@Autowiredで他のクラスでbeanオブジェクト化されたものを使うことができるようになります

 

コメント