@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方法上。