区别
@AllArgsConstructor:生成该类下全部属性的构造方法。
@RequiredArgsConstructor:生成该类下被final修饰或者带有@NonNull的构造方法。
使用场景
在springboot中,对于一个bean类,注入其他bean的时候,常见的是使用@Autowired,实际上也可以使用构造函数注入,这个时候就可以使用@AllArgsConstructor或者@RequiredArgsConstructor来代替。
简化了我们对@Autowired书写,我们在写Controller层或者Service层的时候,总是需要注入很多mapper接口或者service接口,如果每个接口都写上@Autowired,这样看起来就会很繁琐,@AllArgsConstructor,@RequiredArgsConstructor注解可以代替@Autowired注解。
@RequiredArgsConstructor将被修饰final或者@NonNull的属性添加到构造方法上,然后自动注入属性的依赖。 不被修饰final或者@NonNull的属性无法被注入
使用方式
@RestController
@RequiredArgsConstructor
public class JobController {
@PostMapping("/scraper/submitJob")
public DataResult submitJob(@RequestBody SubmitJobInput input) {
ScraperJobInput scraperJobInput = dbGeneralScraperConfigService.jobConfigFromHaida(input);
IScraper scraper = ScraperFactory.singleton.getFirst(scraperJobInput.getScraper().getLocals());
defaultScraperRunner.commitJob(scraper, scraperJobInput);
return DataResult.success(true, "任务已提交");
}
private final IScraperRunner defaultScraperRunner;
private final IDbGeneralScraperConfigService dbGeneralScraperConfigService;
}
注意点:
1、基于构造方法为属性赋值,容器通过调用类的构造方法将其进行依赖注入 2、使用@AllArgsConstructor之后,@Value就会不起作用,可以使用@RequiredArgsConstructor代替