解决Lombok注解不起作⽤的问题
Lombok注解不起作⽤
场景:
减少实体类中如Getter,Setter⽅法的书写
原因:
lombok是⼀个第三⽅插件,我们使⽤时需要进⾏两个步骤(两个步骤缺⼀不可):
1:引⼊lombok依赖
2: 安装lombok插件
equals()方法作⽤:
Lombok是⼀个第三⽅插件,通过它我们可以直接书写注解来代替原来的getter,setter,toString等⽅法。
深⼊理解Lombok
说道Lombok,可能会鲜为⼈知。但是在实际的开发中,它起到了很⼤的作⽤,话不多说,直⼊正题:
⼀、Lombok是什么
第⼀句话,Lombok项⽬是⼀种⾃动接通你的编辑器和构建⼯具的⼀个Java库。接着,不⽤再⼀次写额外的getter或者equals⽅法。翻译到这⾥其实就可以,后⾯是对Lombok早期应⽤的介绍。通过这两句话不难理解lombok其实就是帮助我们编写getter或者equals⽅法的⼀个“⼯具”。其实他的魅⼒并不在于帮助我们简单的编写对应的getter或者更多的⽅法,还有⼀点在于,当我们的字段发⽣改变时,lombok也会对相应的getter⽅法进⾏改变。
⼆、为什么要在⾃⼰的项⽬中使⽤Lombok
要回答这个问题,仅仅知道什么是Lombok是不够的。在讲解原理之前我想再提⼀点,这也是为什么要使⽤Lombok的关键所在:根据Lombok的使⽤规则,如果想要使⽤Lombok就需要删除在项⽬中(JavaB
ean)存在的已经⽣成的getter⽅法setter⽅法以及equals和hash⽅法,当然Lombok也提供了对打印⽇志的处理。这样在使⽤Lombok以后就会⼤⼤减少项⽬中的代码量,同时由于Lombok有⾃动修改的功能,这也提供了项⽬中代码的执⾏效率。
综上所述,使⽤Lombok的两点主要原因就是:
(1)、简化冗余的JavaBean代码;
(2)、⼤⼤提⾼JavaBean中⽅法的执⾏效率;
三、如何使⽤LomBok
在Lombok的官⽹中,有⼀个install选项,我们点开它会看到多种安装⽅式:
⼤家可以根据⾃⼰的项⽬需求来选择使⽤哪种⽅式,这⾥以Maven为例:
点击Maven会看到⼀组坐标:
根据它的提⽰我们将这⼀组坐标添加到我们的pom⽂件中:
添加进去以后点击import change,等待Idea把jar包下载完就可以在项⽬中使⽤了。
四、Lombok实现原理
Lombok实现了JSR 269 API规范,javac在Java6开始⽀持这⼀规范,只要程序实现了该API,就能在javac运⾏的时候得到调⽤,那么Lombok在编译时使⽤的就是javac,具体流程如下:
⾸先是项⽬的源代码⽂件,在经过编译处理以后,lombok会使⽤⾃⼰的抽象语法树去进⾏注解的匹配,如果在项⽬中的某⼀个
类中使⽤了lombok中的注解,那么注解编译器就会⾃动去匹配项⽬中的注解对应到在lombok语法树中的注解⽂件,并经过⾃动编译匹配来⽣成对应类中的getter或者setter⽅法,达到简化代码的⽬的。执⾏顺序就如上图的叠放顺序。
五、Lombok注解详解
Lombok主要常⽤的注解有:
@Data,@getter,@setter,@NoArgsConstructor,@AllArgsConstructor,@ToString,@EqualsAndHashCode,@Slf4j,@Log4j。
我们⼀个⼀个来看:
@Data注解:在JavaBean或类JavaBean中使⽤,这个注解包含范围最⼴,它包含getter、setter、NoArgsConstructor注解,即当使⽤当前注解时,会⾃动⽣成包含的所有⽅法;
@getter注解:在JavaBean或类JavaBean中使⽤,使⽤此注解会⽣成对应的getter⽅法;
@setter注解:在JavaBean或类JavaBean中使⽤,使⽤此注解会⽣成对应的setter⽅法;
@NoArgsConstructor注解:在JavaBean或类JavaBean中使⽤,使⽤此注解会⽣成对应的⽆参构造⽅法;
@AllArgsConstructor注解:在JavaBean或类JavaBean中使⽤,使⽤此注解会⽣成对应的有参构造⽅法;
@ToString注解:在JavaBean或类JavaBean中使⽤,使⽤此注解会⾃动重写对应的toStirng⽅法;
@EqualsAndHashCode注解:在JavaBean或类JavaBean中使⽤,使⽤此注解会⾃动重写对应的equals⽅法和hashCode ⽅法;
@Slf4j:在需要打印⽇志的类中使⽤,当项⽬中使⽤了slf4j打印⽇志框架时使⽤该注解,会简化⽇志的打印流程,只需调⽤info⽅法即可;
@Log4j:在需要打印⽇志的类中使⽤,当项⽬中使⽤了log4j打印⽇志框架时使⽤该注解,会简化⽇志的打印流程,只需调⽤info⽅法即可;
在使⽤以上注解需要处理参数时,处理⽅法如下(以@ToString注解为例,其他注解同@ToString注解):
@ToString(exclude="column")
意义:排除column列所对应的元素,即在⽣成toString⽅法时不包含column参数;
@ToString(exclude={"column1","column2"})
意义:排除多个column列所对应的元素,其中间⽤英⽂状态下的逗号进⾏分割,即在⽣成toString⽅法时不包含多个column参数;
@ToString(of="column")
意义:只⽣成包含column列所对应的元素的参数的toString⽅法,即在⽣成toString⽅法时只包含column参数;;
@ToString(of={"column1","column2"})
意义:只⽣成包含多个column列所对应的元素的参数的toString⽅法,其中间⽤英⽂状态下的逗号进⾏分割,即在⽣成toString
⽅法时只包含多个column参数;
六、使⽤Lombok可能需要注意的地⽅
(1)、当你的IDE是Idea时,要注意你的Idea是⽀持Lombok的,如果不⽀持请更换2017版本尝试。
(2)、在使⽤Lombok时,你的编辑器可能会报错,这时请在你的IDE中安装Lombok插件(如果使⽤的Idea则直接搜索Lombok 插件,选择星级最⾼的,直接安装就是,其他Ide类同)。
(3)、参数的处理往往都是根据项⽬需求来进⾏,请妥善处理参数。
(4)、如果你⽆法访问Lombok官⽹,你可以从这篇博⽂中将Maven坐标照着⾃⼰打进去,或者你也可以访问Maven的中央仓库搜索Lombok,将Maven坐标复制进去即可。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论