spring2.5のアノテーション@Autowiredと@Resource
@Autowiredと@Resourceの違いってなんだろうか。調べてみる。
@Autowired
タイプ(型)が一致する依存性の注入を行う。
フィールド、コンストラクタ、メソッドに付与することが可能。メソッドに付与した場合、そのメソッドは「セッター」メソッドである必要はなく、複数のパラメータを受け取ることができる。
例)
@Autowired public void fire(Bomb bomb, Timer timer) { //何かの処理 }
requiredプロパティを設定できる
例)
@Autowired(required=false) public UfufuObject ufufuObject;
こうするとUfufuObject型のクラスが見つからない場合でもエラーにならない。
@Resource
名前と一致する「Bean名」を持つSpring管理オブジェクトが注入を行う。名前が一致するクラスが見つからない場合、タイプ(型)による検索を行う。型に一致するクラスが1つのみ見つかった場合に注入を行う。
フィールド、メソッドに付与することが可能。
例)
@Resource("ufufuObject") public UfufuObject ufufuObject;
これで"ufufuObject"という名前を持つBeanが注入される
@Resource public UfufuObject ufufuObject;
こうすると変数名の"ufufuObject"という名前からBeanを検索する
う〜む。それぞれどういう場面で使い分けたらいいんだろう。。。
一見すると@Resourceのほうが使い勝手がいい気がするが、@Qualifierを併用することで、@Autowiredの方が使い勝手は良くなりそう。
@Autowired @Qualifier("awawawawa") public UfufuObject ufufuObject;
とすれば名前による注入もできるし
//DataSourceは型で指定、UfufuObjectは名前で指定 @Autowired public void set(@Qualifier("awawawawa")UfufuObject ufufuObject,DataSource dataSource){ //処理 }
なんていうこともできる。
Springの歴史的にも細かく設定できるように@Autowiredが追加されたみたいだし。。。
気が向いたらもっと詳しく調べる。
以上。