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