平时在开发过程中创建实体类的时候就经常的操作是:先写成员变量,然后再提供getXxx()、setXxx()方法,然后看需要再提供toString等方法。这样一来不仅会发现每写一个实体类的话就会有很多相同的操作,而且代码量看起来也很多,很长,不简洁。于是,@Data这个注解就能给我们开发过程中带来很方便的使用了。
@Data注解:这个注解其实是帮你的类提供了getXxx()、setXxx()方法、equals()、hashCode()、toString() 这些方法。也就是说只要你的类上写了这个注解,那就不需要再生成get、set、toString等方法了。
lombok就很好的提供了这些便捷方法;lombok插件是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 Java 代码的工具,例如:比如通常情况下我们需要手动去建立getter和setter方法,构造函数之类的,而lombok的作用就是能够在我们编译源码的时候自动帮我们生成这些方法了。
下面就教大家怎么安装lombok插件:
一:Lombok idea安装
idea中添加lombok插件,首先点开File下的Settings,然后点Plugins,然后点击下面的Browse repositories,然后在搜索框内搜索lombok,然后有个install按钮进行安装,安装完后重启IDEA。
二:添加lombok的maven的pom.xml依赖:
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.6</version> </dependency> </dependencies>
三:注解介绍
下面只是介绍了几个常用的注解,更多的请参见projectlombok.org/features/al…
@Getter / @Setter
可以作用在类上和属性上,放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法。并可以指定Getter/Setter方法的访问级别。
@EqualsAndHashCode
默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。
@ToString
生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。
@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor
无参构造器、部分参数构造器、全参构造器,当我们需要重载多个构造器的时候,Lombok就无能为力了。
@Data
@ToString, @EqualsAndHashCode, 所有属性的@Getter, 所有non-final属性的@Setter和@RequiredArgsConstructor的组合,通常情况下,我们使用这个注解就足够了。
Lombok原理
了解了简单的使用之后,现在应该比较好奇它是如何实现的。整个使用的过程中,只需要使用注解而已,不需要做其它额外的工作,那玄妙之处应该是在注解的解析上。JDK5引入了注解的同时,也提供了两种解析方式。
运行时解析
运行时能够解析的注解,必须将@Retention设置为RUNTIME,这样可以通过反射拿到该注解。java.lang.reflect反射包中提供了一个接口AnnotatedElement,该接口定义了获取注解信息的几个方法,Class、Constructor、Field、Method、Package等都实现了该接口,大部分开发者应该都很熟悉这种解析方式。
boolean isAnnotationPresent(Class<? extends Annotation> annotationClass);
<T extends Annotation> T getAnnotation(Class<T> annotationClass);
Annotation[] getAnnotations();
Annotation[] getDeclaredAnnotations();
Lombok问题
无法支持多种参数构造器的重载;