@RequiredArgsConstructor(onConstructor = @__(@Autowired))的用法和作用

作用:自动生成包含所有final字段的构造函数并在构造函数上添加@Autowired注解

在controller中注入service的时候,IDEA会报警告:不建议使用字段注入或Field injection is not recommended
在这里插入图片描述
要想解决这个报黄,
方法①:可以使用@Resource替代@Autowired

方法②:使用构造器注入
在这里插入图片描述

方法③:在类上添加@RequiredArgsConstructor(onConstructor = @__(@Autowired))

  1. 其实就是生成构造方法,并在生成的构造方法上添加@Autowired注解;查看编译后生成的class文件可以发现自动生成了构造方法并添加了@Autowired注解
    在这里插入图片描述
  2. 需要注意的是,字段需要加上final关键字

@Autowired不是用的好好的吗,为什么要使用构造器注入?
Ⅰ、springboot推荐使用构造器注入
Ⅱ、@Autowired会报黄,报就报
Ⅲ、省了点代码,并且遵循了spring的建议:
如果一个controller中需要注入多个service,只需要声明每个service字段,并在类上添加@RequiredArgsConstructor(…),而不需要每个service字段上添加@Autowired或@Resource

为什么不用手写的构造方法?
手写的话,如果有个service删除了,构造函数也要修改
这就跟为什么不手写get、set方法一个道理
在这里插入图片描述

所以可以说,lombok的很多注解都简化了开发、实现了解耦

你可能会发现:使用构造器注入的时候,构造方法上添加或者不添加@Autowired注解都可以
显式使用@Autowired注解依然是一种良好的实践,因为它能明确表达注入意图,并且在代码审查和理解时提供了额外的信息

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值