SpringBoot中@Autowired和@Resource的区别
作者:互联网
@Autowired和@Resource都可以用于标记自动装配,作用一样但有些区别。
@Autowired默认按类型匹配
但这样通过@Autowired有可能找到多个同类型的bean,在这种情况下可以使用@Qualifier注解来找到要装配的bean,例如
@Autowired(require = true) // 一定要找到匹配的bean,否则抛出异常,缺省为true
@Qualifier("beanName")
所以,在用@Service注解业务接口实现类Impl而没有给予它name的情况下,如果只写@Autowired的话,需要保证业务接口只有一个实现类。在有多个实现类的情况下则要给予name(@Service不给予名字的情况下实现类bean的名字默认为实现类名的小驼峰)并使用@Qualifier。
@Resource默认按名匹配,找不到时按类型匹配
@Resource
TestService testService; // 默认查找名字为testService的bean
public interface TestService {}
@Service // 默认名字为 "testServiceImpl"
public class TestServiceImpl {}
如以上代码所示,@Resource实际上会先去找名字为testService的bean,很显然这个名字的bean不存在,之后@Resource才会按类型匹配去查找TestService的实现类。
因此不给予名字的话,@Resource会去查找两次,最好是这样写
@Resource(name = "testServiceImpl")
TestService testService;
标签:Resource,SpringBoot,Autowired,testService,默认,bean,TestService 来源: https://www.cnblogs.com/super970216/p/15751752.html