开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
👨🎓作者:生无clean
🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。
☠️每日毒鸡汤:好的容貌和很多钱,是进入上流社交活动的通行证。
SpringBoot中注入依赖的方式有很多种,小编在这里介绍最常见的几种依赖注入方式。废话不多说,直接上干货。
SpringBoot注入依赖
一、Field 注入
- Field注入是最简单注入的一种方式,直接使用注解即可完成依赖注入,使用非常的方便,代码看起来也更加的整洁。
@Controller
public class InjectDepend {
@Autowired
private UserService userService;
@Resource
private UserService userService;
}
二、Setter 方法注入
- 使用Setter方式注入依赖的方式很麻烦,一般不建议使用。
- 使用 Setter 注入的时候,需要添加@Autowried或者@Resource注解。
@Controller
public class InjectDepend {
private UserService userService;
private BetaService betaService;
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
@Autowired
public void setBetaService(BetaService betaService) {
this.betaService = betaService;
}
}
三、Constructor 注入(构造器注入)
-
有利于强制依赖。通过在构造函数中提供依赖,您可以确保依赖对象在被构造时已准备好被使用。在构造函数中赋值的字段也可以是final的,这使得对象是完全不可变的,或者至少可以保护其必需的字段。
-
构造器注入还可以避免 Field 注入的循环依赖问题,比如 在 Alpha 中注入 Beta,又在 Beta 中注入 Alpha。如果使用构造器注入,在 Spring 启动的时候就会抛出 BeanCurrentlyInCreationException 提醒循环依赖。
-
使用构造器注入依赖的时候不需要使用 @Autowrite注解或者@Resource注解
@Controller
public class InjectDepend {
private final UserService userService;
private final BetaService betaService;
public InjectDepend(UserService userService, BetaService betaService) {
this.alphaService = alphaService;
this.betaService = betaService;
}
}
四、lombok中的@RequiredArgsConstructor
- 在我们写controller或者Service层的时候,需要注入很多的mapper接口或者另外的service接口,这时候就会写很多的@Autowired注解,代码看起来很乱。
lombok提供了一个注解: @RequiredArgsConstructor(onConstructor =@_(@Autowired)) 写在类上可以代替@Autowired注解,需要注意的是在注入时需要用final定义,或者使用@notnull注解。
@RequiredArgsConstructor
public class InjectDepend {
private final UserService userService;
private final InvitationService invitationService;
}