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

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

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

方法②:使用构造器注入
@RequiredArgsConstructor(onConstructor = @__(@Autowired))的用法和作用_第1张图片

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

  1. 其实就是生成构造方法,并在生成的构造方法上添加@Autowired注解;查看编译后生成的class文件可以发现自动生成了构造方法并添加了@Autowired注解
    @RequiredArgsConstructor(onConstructor = @__(@Autowired))的用法和作用_第2张图片
  2. 需要注意的是,字段需要加上final关键字

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

为什么不用手写的构造方法?
手写的话,如果有个service删除了,构造函数也要修改
这就跟为什么不手写get、set方法一个道理
@RequiredArgsConstructor(onConstructor = @__(@Autowired))的用法和作用_第3张图片

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

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

你可能感兴趣的:(java,spring,boot)