从大学接触项目开始就一直使用@Resource注解,因为它属于Java核心包,使用它可以降低与spring框架的耦合,个人觉得它比@Autowired更强大。
@Resource默认按名称注入,取名之后通过@Resource(name = “定义的名称”)注入,也可通过@Resource(type = com.zdky.tpl.common.service.FileInfoServiceImpl.class)注入,用的比较少。
注入的顺序:
1、@Resource同时指定name和type,则从Spring上下文中找到唯一匹配的bean注入,如果找不到就抛出异常。
2、@Resource仅指定name,就从Spring上下文中查找name进行注入(name就是被注入bean的id,如@Service(“demo”)注解中的"demo"),找不到就抛出异常。
3、@Resource仅指定type,就从Spring上下文中查找type进行注入(type就是被注入bean的全类名的.class,如加了@Service注解的全类名),找不到或者找到多个都会抛出异常。
4、如果@Resource既没指定name,也没指定type就按默认的方式注入(通过名称进行注入,即name,默认为被注入bean的小驼峰命名法的字符),如果找不到,就通过type进行查找,没找到或者找到多个就抛出异常。
一般情况下都是使用@Resource默认的用法,只有出现冲突时才会使用name和type。
今天使用@Resource注入bean,因为存在与注入的接口同名的类,报了如下的错:
解决办法:
1、@Resource配置name,name值为接口实现类的小驼峰命名。
2、使用@Autowired注解。