lombok之@RequiredArgsConstructor,@AllArgsConstructor

531 阅读1分钟

区别

@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代替