Autowired (由Spring提供)
- @Autowired 與 @Resource 都可以通過注入 Field 或 setter 裝配bean,但 @Autowired 可以額外裝配 構造器、多參數方法,@Resource 隻能裝配 單參數方法。
- @Autowired 預設根據 類型 裝配,并且預設情況下該對象必須存在。如果你想允許空值,則必須明确标注 @Autowired(required=false)。除了按類型裝配外,也可以配合 @Qualifier 根據 名稱 裝配。
Resource(由J2EE提供)
- @Resource 預設根據 名稱裝配,允許在注解中直接指定名稱。當你注解時未明确指定名稱,則會先按照預設名稱進行檢索裝配。若檢索失敗,則會依據 類型 進行裝配。
結論
我更偏向于使用 @Resource 注解在 Field上,這樣可以省略 setter方法。
其次,這個注解由 J2EE 提供,可以在 J2EE 環境下通用,而 @Autowired 隻能在 Spring下使用。
最後,統一使用 @Resource 會讓代碼更優雅。
參考位址
http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-autowired-annotation
http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-resource-annotation
http://forum.spring.io/forum/spring-projects/container/40092-autowired-and-resource-difference