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

一个架构师不会用的Lombok笔记,回头见

时间:2023-03-14 22:56:33 科技观察

本文转载自微信公众号“小姐姐的味道”,作者姐姐养的狗。转载本文请联系味觉小姐公众号。我见过很多反对Lombok的同学,偷偷加了插件。这就是振祥原理的把戏。用嘴说不,但要对自己的身体诚实。反对的人应该是没见过一些业务代码的冗长和复杂,还沉浸在自己病态的完美主义中。面对脏乱的工作环境,面对现实。Lombok可以消除Java的冗长,减少代码的长度,将重点转移到应该重点关注的地方。SpringBoot将Lombok放入其依赖项中。Java14甚至借鉴了这个思想,引入了record语法,类似如下:recordPoint(intx,inty){}本文无意讨论类似@Data注解之类的东西。下面来讨论一个比较另类的注解,让你有种似曾相识的感觉:RequiredArgsConstructor。爆款属性注入Spring提供了两种注入方式,也是非常初级的程序员经常被问到的三种DI写法。一种是属性注入(Filedinjection),一种是通过setter方法,还有一种是构造函数注入。霍霍,我骗人的,经常被问到的就是byName和byType。然而,这些天,我们更多地使用@Autowired注解。代码一般是这样写的。@ServicepublicclassGoodsServiceImplimplementsGoodsSrv{@AutowiredprivateGoodsRepogoodsRepo;@AutowiredprivateTagRepotagRepo;@AutowiredprivateTagRefRepotagRefRepo;@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))End通过这些方法,你写的代码行数可能会急剧下降。在一个贡献代码行数论的公司,可能会帮你拿到3.25,但是这个3.25是骄傲。这些小把戏,xjjdog说的是一个比一个少,如果你三番友情,说不定能打通我任督二脉,以后就可以少点广告,多点干货。作者简介:品味小姐姐(xjjdog),一个不允许程序员走弯路的公众号。专注于基础架构和Linux。十年架构,每天百亿流量,与你探讨高并发世界,给你不一样的滋味。我的个人微信xjjdog0,欢迎加好友进一步交流。