在Java代碼中能夠使用 @Resource 或者 @Autowired 註解方式來進行注入。 雖然 @Resource 和 @Autowried 均可以完成依賴注入,可是他們是有區別的java
默認是按照名稱來裝配注入的,只有當找不到與名稱匹配的bean纔會按照類型來注入。spring
它有兩個屬性是比較重要的:ui
若是既不指定 name 屬性又不指定 type 屬性,Spring這時經過反射機制使用 byName 自動注入策略this
@Resource 的裝配順序spa
默認是按照類型進行裝配注入,默認狀況下,它要求依賴對象必須存在,若是容許 null 值,能夠設置它 required 爲false。.net
若是咱們想要按名稱進行裝配的話,能夠添加一個 @Qualifier 註解解決。code
@Autowried @Qualifier("adminDAO") private AdminDAO adminDAO;
@Resource 註解是 J2EE 提供的, 而 @Autowried 是 Spring 提供的,若是想減小對 Spring 的依賴建議使用 @Resource 方法。對象
@Resource 和 @Autowried 均可以加在字段的 setter 方法上。blog
@Autowired是根據類型進行自動裝配的。若是當spring上下文中存在不止一個UserDao類型的bean時,就會拋出BeanCreationException異常;若是Spring上下文中不存在UserDao類型的bean,也會拋出BeanCreationException異常。咱們能夠使用@Qualifier配合@Autowired來解決這些問題。以下代碼所示:get
①可能存在多個UserDao實例
@Autowired @Qualifier("userServiceImpl") public IUserService userService;
或者
@Autowired public void setUserDao(@Qualifier("userDao") UserDao userDao) { this.userDao = userDao; }
這樣Spring會直接找id爲userServiceImpl和userDao的bean進行裝配,從而解決多個bean形成的異常問題。