Springmvc中@Autowired注解と@Resource注解の違い

1691 ワード

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を文脈から見つけて組み立てます.見つけられないか、あるいは見つけられないかは異常です.nameも指定されていないし、typeも指定されていないなら、自動的にbyName方式で組み立てられます.マッチしていない場合は、元のタイプに戻してマッチングします.マッチングすれば自動的に組み立てられます.
@Autowiredと@Resourceの違い:
 
1、 @Autowiredと@Resourceはいずれもbeanを組み立てるために使用できます.フィールドに書いたり、setter方法に書いたりできます.
2、 @Autowiredはデフォルトでは、タイプ別に組み立てられています.デフォルトでは依存対象が必要です.null値を許可するなら、required属性はfalseとして設定できます.例えば、@Autowired(required=false)といいます.名前を使って組み立てるなら、@Qualfier注解を組み合わせて使用できます.
1
2@Autowired()@Qualifier("baseDao")privateBaseDao baseDao;3、@Resource(この注釈はJ 2 EEのもの)は、デフォルトのインストール名で組み立てることができます.名前はname属性で指定できます.name属性が指定されていない場合、コメントがフィールドに書き込まれた場合、デフォルトではフィールド名を取ってインストール名を検索します.名前にマッチするbeanが見つからない場合は、タイプによって組み立てられます.ただし、name属性が指定されたら、名称に従って組み立てるしかないので注意が必要です.
1
2@Resource(name="baseDao")privateBaseDao baseDao;推荐使用:@Resource注解はフィールド上にありますので、setterメソッドを書く必要はありません.この注解はJ 2 EEに属しています.springとの結合が減少しました.コードを見ると優雅です.