当前位置: 首页 > 科技观察

说是反对Lombok,但身体上说实在话,,

时间:2023-03-23 01:50:13 科技观察

看到很多反对Lombok的同学在背后偷偷加插件。这就是振祥原理的把戏。图片来自Pexels嘴上说不,身体很老实。反对的人应该是没见过一些业务代码的冗长和复杂,还沉浸在自己病态的完美主义中。面对脏乱的工作环境,面对现实。Lombok可以消除Java的冗长,减少代码的长度,让重心转移到重点上。SpringBoot把Lombok放在了它的依赖中,Java14甚至借鉴了这个思路,引入了record语法。它类似于以下内容:recordPoint(intx,inty){}本文无意讨论任何与@Data注解类似的内容。下面来讨论一个比较另类的注解,让你有种似曾相识的感觉:RequiredArgsConstructor。爆款属性注入Spring提供了两种注入方式,也是非常初级的程序员经常被问到的三种DI写法。一种是属性注入(Filedinjection),一种是通过Setter方法,还有一种是构造函数注入。哎,我撒谎了,经常被问到的是byName和byType。然而,现在,我们更频繁地使用@Autowired注解。代码一般是这样写的:@ServicepublicclassGoodsServiceImplimplementsGoodsSrv{@AutowiredprivateGoodsRepogoodsRepo;@AutowiredprivateTagRepotagRepo;@AutowiredprivateTagRepotagRefRepo;@AutowiredprivateBrandRepobrandRepo;@AutowiredprivateUnitRepounitRepo;}这个一般没问题,因为注入的字段是有限的。但是如果你没有看过一些项目代码,你就会被编程世界中这种完美的表象所欺骗。没有注释的业务代码随处可见,单个文件超过2000行。注入的属性可以达到十几个之多。这部分注入的代码真的很乱。不仅如此,这些字段在IDE中也会变成灰色,告诉你它们没有初始化,代码变得难看。其实从Spring4.0开始,就不推荐使用属性注入方式了,因为这样可以让我们忽略一些代码可能变坏的隐患。这个问题大家可以自行搜索,我们就不展开了。既然Spring建议使用显式设置器和构造函数,让我们切换实现。Setter方法基本上用的人比较少,因为比较臭,而且比较长。如果你为每个属性都写一个set方法,我估计你就算用代码生成器也会恶心。ConstructorinjectionThen,theconstructormethodhasbecomeourfirstchoice.样例代码如下:publicclassGoodsServiceImplimplementsGoodsSrv{privateGoodsRepogoodsRepo;privateTagRepotagRepo;privateTagRefRepotagRefRepo;privateBrandRepobrandRepo;privateUnitRepounitRepo;publicGoodsServiceImpl(GoodsRepogoodsRepo,TagRepotagRepo,TagRefRepotagRefRepo,BrandRepobrandRepo,UnitRepounitRepo){this.goodsRepo=goodsRepo;this.tagRefRepo=tagRefRepo;this.tagRefRepo=tagRefRepo;这个。brandRepo=brandRepo;this.unitRepo=unitRepo;this.tagRepo=tagRepo;}}Spring可以使用构造函数完成注入,无需添加其他注解。问题是,我们还得写很多代码。这时候你可能会想到Lombok的AllArgsConstructor注解。但它适用于所有属性。如果类中有一些非Bean的属性,Spring就会晕倒。这时候就可以使用RequiredArgsConstructor。代码如下:@Service@RequiredArgsConstructorpublicclassGoodsServiceImplimplementsGoodsSrv{finalGoodsRepogoodsRepo;finalTagRepotagRepo;finalTagRefRepotagRefRepo;finalBrandRepobrandRepo;finalUnitRepounitRepo;}我们修改final类型需要注入的属性(或者使用@NotNull默认)注解属性,不会构成构造函数注解。Java要求初始化final类型的属性,如果没有构造函数,代码会变红。我们可以看到修改后的IDE,烦人的灰色提示已经消失了。这样的代码非常简洁。更高级的RequiredArgsConstructor注解,也可以像下面这样写。即使把@__换成@_,或者换成@___,也能正常工作。@RequiredArgsConstructor(onConstructor=@__(@Autowired))意思是给Lombok生成的构造函数方法加上@Autowired注解。这是彻头彻尾的Lombok语法,但现在Spring可以在不添加此类注释的情况下运行。看我下面的代码,居然可以运行。你快乐吗?@RequiredArgsConstructor(onConstructor=@__________________________________________(@Autowired))真是一个可怕的美人!通过这些方法,你写的代码行数可能会急剧下降。在一个贡献代码行数的公司,可能会帮你拿到3.25,但是这个3.25是骄傲。作者:品味小姐姐简介:专注于基础架构和Linux。十年架构,每天百亿流量,与你探讨高并发世界,给你不一样的滋味。编辑:陶佳龙来源:转载自公众号味觉小姐(ID:xjjdog)