Springのアノテーションとは
「アノテーションはクラスやインターフェースをbeanというオブジェクトにして、
そのオブジェクトを使いたいところで使う」というSpringフレームワークで使える便利な機能です。
アノテーションの種類はたくさんありますが、大きく分けて2種類あります。
①アノテーションが付与されたモノをSpringのDIコンテナにbeanとして登録するアノテーション
例としては
・@Controller
・@Service
・@Component
・@Repository
②bean化したオブジェクトを注入するアノテーション
例としては
・@RequestMapping
・@Autowired
・@NotNull
②詰めた箱から情報を取り出すのか ⇒ オブジェクトを使いたいところで使う(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インターフェースが使えるようになります。
1 |
@RequestMapping(value = "/registrate") |
このようにvalueを設定すると、JSPでサブミットされたURLと紐づけることができます。
@NotNullも同じくSpringフレームワークが提供するアノテーションです。
このアノテーションを使うとNotNullインターフェースが使えるようになります。
Form.javaで設定しているエンティティにこのアノテーションをつけると、画面入力がその項目に対してされなかった場合、ヴァリデーションエラーと扱ってくれます。
@RequestMapや@NotNullのようにSpringフレームワークが提供してくれるbeanを使うアノテーションもある。
どのようにフレームワークに認識されるのか
servlet-context.xmlの解説で登場した、サーバーをスキャンする1行があります。
1 |
<context:component-scan base-package="com.dreamhanks.workmanager" /> |
base-packageで定義したパス以下を読み取るようになっています。
このパス以下にcontrollerクラスがあって、その中でクラス宣言の上に@Controllerと書いていたら
Springフレームワークは、そのクラスをコントローラだと認識します。
@Serviceも@Compornentも@Repositoryも同じようにSpringフレームワークが認識して、beanオブジェクトに詰め込みます。
そして、@Autowiredで他のクラスでbeanオブジェクト化されたものを使うことができるようになります
コメント