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

发布时间:2024年01月11日

作用:自动生成包含所有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注解依然是一种良好的实践,因为它能明确表达注入意图,并且在代码审查和理解时提供了额外的信息

文章来源:https://blog.csdn.net/2301_78164643/article/details/135521716
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。