你还在使用@Autowired注入依赖吗?

我们在代码中是否出现过这样的提示?
在这里插入图片描述
【译文:不建议字段注入】
那我不接受建议可以吗?当然可以。

分析一下为啥不推荐字段注入

其实网上总结得也比较多,我这里就随便讲讲我的理解,欢迎各位大佬在评论区补充。

  1. 注入字段值可变。
  2. 有可能为空。
  3. 可能出现循环依赖。

然后解释一下:

  • 可变
    在这里插入图片描述
    既然不能用final修饰,那么就一定有可能在代码中换成另外一个。

  • 有可能为空
    之前遇到过一个情况,在业务调用的时候将对象new出来进行调用了。这个时候字段并没有被赋值上,是null。这导致在具体调用方法时出现了空指针。

  • 可能出现循环依赖
    在这里插入图片描述
    spring可以帮我们解决一部分循环依赖问题,但是像这种,@Async修饰的方法 spring会为其生成一个代理类,这个时候发现有循环依赖问题就会被抛出。
    你想想,你写着代码唱着歌,写了一个异步方法,突然项目就启动失败了!

既然不推荐字段注入,推荐怎样注入呢?

答案是:构造注入
其他的就不能用了吗?:
存在即是合理的,你去google一下把警告给去掉,其实不去掉也不影响你使用。

比较一下三种注入方式的特点:

构造注入:不可变,不为空,循环依赖了就报错–强依赖。(类方法工作一定要用,那就用构造注入)
setter注入:可选,可变。(作为可选项依赖,有没有值反正不影响方法工作,我用得比较少)
filed注入:精短,可读性高。

构造注入配合Lombok的@RequiredArgsConstructor使用还是很方便的。

@RequiredArgsConstructor
@Service
public class TestServiceImpl {
	private final AService aService;
	private final BService bService;
}

构造注入不会出现循环依赖问题。
如果依赖项太多,构造不规范了,这个时候应该考虑是否违背了接口单一职责原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值