首先@Autowired、@Qualifier是spring的。
@Resource是jdk提供的
@Reference注解是dubbo的。
1.@bean注解
能产生Bean的注解有:@Component、@Repository、@Controller、@Service、@Configration
这五种只能对类使用。
@Bean
(特殊,可对方法注解。@Bean注解需在上方五个注解的类中才生效)
bean注解作用:spring会自动扫描带有上面的注解,然后相当于生成一个该类的对象,只能通过@autowired等注解获取,不能通过new获取。
2.@Autowired注解
- Spring框架提供的注解
- 根据类型(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注解
- Java EE提供的注解
- 根据名称(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配置使用。
具体使用方法可以百度。