@Autowired註解和@Resource註解的區別?
答:
@Autowired:是Spring框架中提供的一個註解。採取的是注入策略 是按照類型進行注入。
如:
public class Test{
@Autowired
private UserDao userDao;
}
但是如果這個時候這個userDao有多個bean值的是,就會造成無法選擇具體注入哪一個類的情況。所以要配合着**@Qualifier** 進行使用。@Qualifier 告訴spring具體去裝配那個對象。
public class Test{
@Autowired
@Qualifier(name="userDao1")
private UserDao userDao;
}
@Resource:這個註解是Java提供的,需要jdk1.6以上。默認是按照ByName進行自動注入的。
public class UserService {
@Resource
private UserDao userDao;
@Resource(name="studentDao")
private Student studentDao;
@Resource(type="teacherDao")
private TeacherDao teacherDao;
@Resource(name="manDao",type="manDao")
private ManDao manDao;
}
1、如果同時指定了name和type,則從Spring上下文中找到唯一匹配的Bean進行裝配。找不到則拋出異常。
2、如果指定了name,則從上下文中查找名稱id,匹配的bean進行裝配。找不到則拋出異常。
3、如果指定了type,則從上下文中找到類似匹配唯一bean進行裝配。找不到或找到多個都會拋出異常。
4、如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配。如果沒有匹配則回退爲一個原始類型進行匹配,如果匹配則自動進行裝配。
總結:
Spring屬於第三方的,J2EE是Java自己的東西。使用@Resource可以減少代碼和Spring之間的耦合。
–