Spring Framework Advent Calendar 2011 part.11 @Autowired, @Resource, @Qualifier
Spring Framework Advent Calender の 11 日目です。今日は、アノテーションベースでの DI を行うときに頻出のアノテーションとなる @Autowired, @Resource, @Qualifier について整理してみます。
@Autowired | @Resource | |
---|---|---|
出自 | Spring 独自 | JSR250 |
記述できる場所 | フィールド、コンストラクター、引数が複数あるメソッド | フィールド、引数が1つのセッターメソッド |
マッチング方法 | 型によるバインド | 名前によるバインド |
候補が複数マッチした場合 | @Qualifier がある場合はさらに絞り込み、それでも複数ある場合は例外発生 | 例外発生 |
その他 | Collection や Map にはバインドできない*1 |
- コンストラクターや複数が引数あるメソッドに対する Injection をしたいなら @Autowired を使うしかない。
- コレクションや Map に対して DI したい場合は、アノテーションベースでやるなら @Autowired は使えない。@Resource であれば可能。
- @Autowired は Spring 独自。POJO を特定フレームワークに依存させたくないなら @Resource をつかう。
- ただし、その場合は Component-Scan をどうするかという課題が残る。
- @Service や @Component は Spring 独自のアノテーション。
- ただし、その場合は Component-Scan をどうするかという課題が残る。
今回のエントリに関連するオンラインマニュアルの記述は http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-annotation-config です。