Loading... ## 日常开发发现 思考:大家看到如下代码,有发现什么问题呢?  是不是很多@Resource,造成不仅是代码的整洁度,还是代码观感,其实都不是很好,我们常常说尽量消除冗余代码,增强复用,那么这里的注解我们是不是可以消除掉呢? ## Spring官方更推荐我们使用构造器注入 原先使用 @Autowired 注解官方会提示我们:删除此字段注入并使用构造函数注入 Remove this field injection and use constructor injection instead. 并且会以一个波浪线警告的形式出现,**有代码洁癖的人会极度不舒适** @Resource 这个注解不是Spring官方提供的,而是J2EE(Java 250 规范提案)提供的,它不会有波浪线警告 两个注解最大区别就是: @Autowired根据 By Type 查找Bean,如果存在多个Bean,再根据 By Name 查找Bean @Resource根据By Name查找Bean,如果ByName找不到Bean,再根据By Type查找Bean 其实,**两种方式都是通过setter方式进行注入**,终究不是Spring官方推荐的方式 我们能不能使用构造器注入,么稳态啦! 我们能不能优雅的构造器注入,么稳态啦! ## 代码整洁优化 前提引入Lombok依赖,这个依赖出现很多纷争,有些人推荐用,有些人不推荐用,可根据各公司实际情况使用 使用 @RequiredArgsConstructor + final @NonNull field 实现构造器注入Bean  是不是上面的代码不管是整洁度,还是代码观感都十分优雅了,而且我们不用在属性上加上@Resource 或者@Autowired,只需要像书写最终属性一样即可,而且我们还可以通过点击左边的小点,找到实现类。 ## 原理解读 @RequiredArgsConstructor 这个属性是Lombok依赖提供的,作用域在类上,作用是生成所需要参数的构造函数,但是注意:字段必须是final修饰和具有@NonNull等约束的字段(这里的 final 和 @NonNull 满足其一即可) 之前如果我们需要使用构造器注入,则需要手动书写构造器,而是对于后续更多Bean的注入,我们又需要重新在构造器中添加需要注入的Bean参数,略显繁琐,但是如今通过这种方法就可以省去了这个步骤,并且是Spring官方推荐的Bean注入方式。 ## 特别注意 对于Lombok比较熟悉的人来说,肯定知道@AllArgsConstructor,这个注解可以生成该类下的全部属性的构造方法,那他们的区别是什么呢? @AllArgsConstructor:生成该类下全部属性的构造方法。 @RequiredArgsConstructor:生成该类下被final修饰或者带有@NonNull的构造方法。 --- 使用@AllArgsConstructor之后,**@Value就会不起作用** 可以使用@RequiredArgsConstructor代替 --- 最后修改:2024 年 11 月 12 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果文章有用,请随意打赏。