@Resource註解(使用頻率很高):先看一個例子
private UserDAO userDao;
public UserDAO getUserDao() {
return userDao;
}
@Resource(name="配置文件中Bean的名字(或者id)")
public void setUserDao(UserDAO userDao) {
this.userDao = userDao;
}
這樣容器會自動將Bean名字所對應的對象注入。
@Resource註解的注入規則(一定是按名字自動注入的:byName):
1.@Resource指定了name屬性的值-->@Resource(name="xxx"),這樣容器會完全按照xxx去找配置文件,並且注入Bean,一旦沒有找到,就會拋出異常
2.@Resource未指定name屬性的值。情況看起來有點複雜.
1)如果註解定義在字段上,就按字段名去配置文件找,並自動裝配進容器
2)如果註解定義在字段的setter方法上,則按對應的字段(如setUserDao-->userDao)去配置文件找,並自動裝配
如果上面按照名字去找都沒有找到,則按type再去找,找到,自動裝配,找不到,拋出異常
爲什麼會這麼麻煩呢?因爲@Resource和@Autowire都可以定義到字段或者字段的setter方法上。