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 をどうするかという課題が残る。


今回のエントリに関連するオンラインマニュアルの記述は http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-annotation-config です。