@bean、@Autowired、@Resource、@Qualifier、@Reference的区别和使用详情

本文详细介绍了Spring的@Autowired、@Qualifier和JavaEE的@Resource注解的使用场景及行为,包括它们在bean查找和注入过程中的区别。理解这些注解有助于提升在Spring和Dubbo应用中的组件化和依赖注入能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先@Autowired、@Qualifier是spring的。
@Resource是jdk提供的
@Reference注解是dubbo的。

1.@bean注解

能产生Bean的注解有:@Component、@Repository、@Controller、@Service、@Configration这五种只能对类使用。
@Bean (特殊,可对方法注解。@Bean注解需在上方五个注解的类中才生效)
bean注解作用:spring会自动扫描带有上面的注解,然后相当于生成一个该类的对象,只能通过@autowired等注解获取,不能通过new获取。

2.@Autowired注解

  1. Spring框架提供的注解
  2. 根据类型(byType)去获取bean

如果获取到了多个相同类型的bean,则根据名称去获取,
如果获取了多个名称相同的bean则会报错。
例:

@Autowired
private UserService userService;
// 情况1.(失败)如果UserService 没有bean,则userService为null 
// 情况2.(成功)如果UserService 定义了1个bean,则userService根据类型获取到了该bean
// 情况3.(成功)如果UserService 定义了多个名称不同的bean,其中有一个bean名称为userService,则成功获取到该bean
// 情况4.(失败)如果UserService 定义了多个名称不同的bean,bean名称都不为userService,则userService为null 
// 情况5.(失败)如果UserService 定义了多个名称不同的bean,其中有多个名称为userService,则报错

3.@Resource注解

  1. Java EE提供的注解
  2. 根据名称(byName)去获取bean

例:

@Resource
private UserService userService;
// 情况1:(失败)没有名称为userService
// 情况2:(成功)有一个名称为userService
// 情况3:(失败)有多个名称为userService,报错

也可以给@Resource加上参数name ,这样取得就是名称为userService1

@Resource(name = "userService1")
private UserService userService;

4.@Qualifier注解

@Qualifier注解是和@Autowired注解配合使用的
例:

// @Autowired + @Qualifier = @Resource
// 这两个注解的作用相当于@Resource,也是根据名称来获取bean,这里是根据userService1获取
@Qualifier(value = "userService1")
@Autowired
private UserService userService;

5.@Reference注解

注入的是分布式的远程服务的对象,需要dubbo配置使用。
具体使用方法可以百度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值