@Autowired
@Autowired為Spring提供的注解,需要導入包org.springframework.beans.factory.annotation.Autowired。
@Autowired采取的策略為按照類型注入。
public class UserService { @Autowired private UserDao userDao; }
如上代碼所示,這樣裝配回去spring容器中找到類型為UserDao的類,然后將其注入進來。這樣會產(chǎn)生一個問題,當一個類型有多個bean值的時候,會造成無法選擇具體注入哪一個的情況,這個時候我們需要配合著@Qualifier使用。
@Qualifier告訴spring具體去裝配哪個對象。
public class UserService { @Autowired @Qualifier("userDao1") private UserDao userDao; }
這個時候我們就可以通過類型和名稱定位到我們想注入的對象。
@Resource
@Resource注解由J2EE提供,需要導入包javax.annotation.Resource。
@Resource默認按照ByName自動注入。
public class UserService { @Resource private UserDao userDao; @Resource(name="studentDao") private StudentDao studentDao; @Resource(type="TeacherDao") private TeacherDao teacherDao; @Resource(name="manDao",type="ManDao") private ManDao manDao; }
①如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則拋出異常。
②如果指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常。
③如果指定了type,則從上下文中找到類似匹配的唯一bean進行裝配,找不到或是找到多個,都會拋出異常。
④如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退為一個原始類型進行匹配,如果匹配則自動裝配