Spring中@Autowiredと@Resourceの違い

1589 ワード

Springは自分で定義した@Autowired注釈をサポートするだけでなく、JSR-250仕様によって定義されたいくつかの注釈をサポートしています.それらはそれぞれ@Resource、@PostConstructおよび@Predestryです.
  
@Resourceの役割は@Autowiredに相当しますが、@AutowiredはbyTypeで自動注入されます.@ResourceはデフォルトではbyNameで自動注入されます.Resourceは二つの属性が重要で、nameとtypeに分けられ、Springは@Resourceに注釈されたname属性をbeanの名前に解析し、type属性はbeanのタイプに解析します.したがって、name属性を使用すると、byNameの自動注入ポリシーを使用し、type属性を使用する場合はbyType自動注入ポリシーを使用します.nameもtype属性も指定されていない場合は、反射機構によりbyName自動注入術を使用します.
@Resource組立手順
1.nameとtypeを同時に指定したら、Spring文脈から唯一一致するbeanを見つけて組み立てて、見つけられないなら異常を投げます.
2.nameが指定されている場合は、コンテキストから名前(id)にマッチするbeanを探して組み立てます.見つけられない場合は例外を投げます.
3.typeを指定したら、文脈からタイプマッチングの唯一のbeanを見つけて組み立てます.見つけられないか、複数を見つけられないか、いずれも異常を投げます.
4.nameが指定されておらず、typeも指定されていない場合、自動的にbyName方式で組み立てられます.マッチしていない場合は、元のタイプに戻してマッチングします.マッチングすれば自動的に組み立てられます.
@Autowiredと@Resourceの違い:
1、@Autowiredと@Resourceはbeanを組み立てることができます.フィールドに書いたり、setter方法に書いたりします.
2、@Autowiredはデフォルトではタイプ別の組み立て(この注釈はプロのspringです)であり、デフォルトでは依存対象が存在しなければなりません.null値を許可するなら、そのrequired属性はfalseとして設定できます.

@Autowired() @Qualifier("baseDao")
private BaseDao baseDao;
3、@Resource(この注釈はJ 2 EEのもの)は、デフォルトのインストール名で組み立てることができます.名前はname属性で指定できます.name属性が指定されていない場合、コメントがフィールドに書き込まれた場合、デフォルトではフィールド名を取ってインストール名を検索します.名前にマッチするbeanが見つからない場合は、タイプによって組み立てられます.ただし、name属性が指定されたら、名称に従って組み立てるしかないので注意が必要です.

@Resource(name="baseDao")
private BaseDao baseDao;
推荐使用:@Resource注解はフィールド上にありますので、setterメソッドを書く必要はありません.この注解はJ 2 EEに属しています.springとの結合が減少しました.コードを見ると優雅です.