SpringBoot中@Autowired @Resource @Qualifier的区别
大约 1 分钟
@Autowired
、@Resource
和 @Qualifier
是在Spring框架中用于管理依赖注入和连接Bean的常用注解,它们各自有不同的用途:
@Autowired
主要用于基于类型的注入。@Resource
用于基于名称的注入,不仅限于Spring。@Qualifier
用于在存在多个相同类型的Bean可供注入时,指定Bean的名称或标识符,通常与@Autowired
或@Resource
结合使用来解决歧义问题。
@Autowired
:@Autowired
是Spring特有的注解,用于自动依赖注入。当你将字段、构造函数或setter方法标记为@Autowired
时,Spring会自动根据类型来解析和注入适当的Bean。- 如果存在多个相同类型的Bean,Spring 可能不知道应该注入哪个,因此你可能需要在
@Autowired
旁边使用@Qualifier
,以指定Bean的名称。
示例:
@Autowired
private SomeService someService;
@Resource
:@Resource
是标准的Java EE注解,但也被Spring支持。它用于按名称进行依赖注入。你可以使用@Resource
标注字段、setter方法或构造函数参数,并指定要注入的Bean的名称。- 与
@Autowired
不同,@Resource
允许按名称进行注入,并且可以用于从Spring之外的其他框架或资源中注入依赖项。
示例:
@Resource(name = "someServiceBean")
private SomeService someService;
@Qualifier
:@Qualifier
常常与@Autowired
或@Resource
结合使用,当存在多个相同类型的Bean可供注入时,你可以使用@Qualifier
来指定要使用的Bean。- 通过使用
@Qualifier
,你提供了一个唯一的标识符(通常是Bean的名称),以消除哪个Bean应该被注入的歧义。
带有 @Autowired
和 @Qualifier
的示例:
@Autowired
@Qualifier("someServiceBean")
private SomeService someService;