Spring组件注入三种方式的使用和区别

发布时间 2023-09-24 20:56:56作者: 清寡

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。

三者区别总结

  1. @Autowired按类型注入,@Resource默认按名称注入
  2. @Autowired不要求写setter,@Resource和@RequiredArgsConstructor需要
  3. @Autowired和@RequiredArgsConstructor只注入Spring容器bean,@Resource可以注入任意bean

以上就是这三种注入方式的区别,各有优劣,可以根据具体需求选择最适合的注入方式。