spring6中有一个注解 @Resource , @Resource 和 @Resources 不一样,这两个注解区别很大,不能写错了。
其次, @Resource 注解有很多属性,其中的name属性默认,可以不用设置,但是设置后可能会出现name属性值无法解析的情况,
例如将 @Resource 在方法上生声明的时候, @Resource(name="")会报错:Bean创建异常以及嵌套异常,显示无法解析。如下图所示:
那么为什么会出现这个问题呢?因为 @Resource(name = "beanId"),是跟 @Component的属性值相关联的,因为 @Resource注解只能出现在属性上和setter方法上。
而出现在属性上的时候,该属性可能是一个类,这个类的 @Component注解的属性值其实对应的就是xml文件的beanId。
所以 @Resource的name属性值声明的属性的 @Component的属性值。
@Component注解声明在类上,属性值可以写,也可以不写,不写,默认是类名的第一个字母小写,其他单词首字母大写。
例如:
@Component("accountDao")
public void AccountDao(){}
public void AccountService(){
@Resource("accountDao")
private AccountDao accoutDao;
...
...
...
}
注意:以上代码中的 @Resouce("accountDao") 对应的可不是 private AccountDao accoutDao; 中的accoutDao,对应的是 @Component("accountDao")
对应的是AccountDao类的 @Component注解的属性值。这个我就搞混过了一次。要记住。
再比如说:
@Repository注解和@Component没什么区别,接口不用添加注解,在接口的实现类中可以添加注解。
@Resource(name = "accountDao")
private AccountDao accountDao;
// 对应的是@Repository("accountDao")
// 不是private AccountDao accountDao;中的accountDao。
@Repository("accountDao")
public class AccountDaoImpl implements AccountDao(){}
我学习spring是通过这个链接学习的,有朋友感兴趣可以学习一下,里面有全面的讲述spring框架,也有详细的讲解@Resource注解的,我发这个文章主要是为了记录细节,毕竟搞混过一次。
视频地址:https://www.bilibili.com/video/BV1Ft4y1g7Fb?t=16.3&p=79