Spring框架提供了多种注入bean的方式,其中最常用的有@Autowired、@Resource和@RequiredArgsConstructor三种。这篇文章我们来讲解它们的具体使用和区别。
@Autowired
@Autowired是Spring自带的注解,放在属性字段或者setter方法上,可以实现按类型(byType)自动注入。如果有多个类型符合的bean候选者,还需要配合@Qualifier按名称(byName)指定注入的bean。
@Autowired
private UserService userService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@Autowired的优点是不需要写setter方法就能实现注入,更加简洁。需要注意,它注入的不仅仅是Spring容器管理的bean,任意类型都可以。
@Resource
@Resource来自Java提供的注解,默认按照名称(byName)匹配注入。也可以指定name/type来定制匹配的策略。
@Resource(name="userService")
private UserService userService;
@Resource(type=UserService.class)
private UserService userService;
@Resource要求注入属性必须定义setter方法,不可以像@Autowired那样省略setter。另外,它只能注入Spring容器管理的bean。
@RequiredArgsConstructor
这个注解来自Lombok,可以自动生成一个包含需要注入属性的构造方法,帮助完成初始化。
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
}
注入属性需要用final修饰,表明是不可变的。这种方式也只能注入Spring容器中的bean。
三者区别总结
- @Autowired按类型注入,@Resource默认按名称注入
- @Autowired不要求写setter,@Resource和@RequiredArgsConstructor需要
- @Autowired和@RequiredArgsConstructor只注入Spring容器bean,@Resource可以注入任意bean
以上就是这三种注入方式的区别,各有优劣,可以根据具体需求选择最适合的注入方式。