目录html
java开发者应该都有这样的一种经历,定义完JavaBean后,须要生成其对于的构造函数、getter、setter、equals、hashCode、toString等方法,虽然能够经过IDE去生成,可是仍是会有修改变量名或类型后须要修改上面提到的方法、代码冗余等问题。
lombok就是为解决上面问题的工具,真是遗憾为啥如今才发现这个工具。下面就把学习的过程记录下。java
Lombok是一个能够经过简单的注解形式来帮助咱们简化消除一些必须有但显得很臃肿的Java代码的工具,经过使用对应的注解,能够在编译源码的时候生成对应的方法。web
这里只记录在idea上安装的操做,之后在eclipse上安装时,在补充。eclipse
打开IDEA的Setting –> 选择Plugins选项 –> 选择Browse repositories –> 搜索lombok –> 点击安装 –> 安装完成重启IDEA –> 安装成功
安装后须要重启idea才能生效。maven
maven用户能够直接添加:(具体版本可查看maven仓库:http://mvnrepository.com/)ide
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> </dependency> </dependencies>
lombok的注释有:@Getter、@Setter、@NonNull、@ToString、@EqualsAndHashCode、@Data、@Cleanup、@Synchronized、@SneakyThrows、@Slf4j。下面咱们就来一一介绍:函数
可注解到类或字段上,会为指定字段或类的全部字段生成对应的Getter和Setter方法,默认方法都public类型的,也可修改方法的访问级别。工具
可看到各个字段根据对应的注释自动生成了对应的Getter和Setter方法,birthDay字段的Getter方法设置为了protected。
学习
在类上设置则该类的全部的字段均可生成对应的Getter和Setter方法。
ui
使用在字段或方法上,用于判断在使用字段时,如果该字段为null,则会抛出NullPointerException。
状况1:注解字段后,该这段的setter方法(对getter方法没有影响),如果设置的值为null,则会抛出NullPointerException。
状况2:还能使用在方法的参数字段上,做用是在使用该方法时,会先检查被@NonNull的字段传递的值是否为null,如果就抛出NullPointerException。
注释在类上,表示自动生成物参数的构造方法
注释在类上,表示自动生成toString()方法;还能根据相关参数,实现其余功能,好比:打印父类的字段。
注释在类上,表示equals和hashCode方法。
如果需求挺多,那岂不是注解也胡不少吗?@Data能够解决这个问题。
注释在类上,至关于@ToString, @EqualsAndHashCode, @Getter and @Setter。
该@Cleanup注释能够用来保证分配的资源被释放。当使用带注释的局部变量时@Cleanup,任何后续代码都包含在一个 try/finally块中,该块保证在当前做用域的末尾调用cleanup方法。默认状况下,@Cleanup 假设清理方法命名为“close”,与输入和输出流同样。可是,能够为注释的value参数提供不一样的方法名称。只有不带参数的清理方法才能与此注释一块儿使用。
使用@Cleanup注释时还须要注意一点。若是清理方法抛出异常,它将抢占方法体中引起的任何异常。这可能致使问题的实际缘由被掩盖,而且在选择使用Project Lombok的资源管理时应该考虑到这一点。此外,随着Java 7中的自动资源管理,这个特定的注释可能相对短暂。
Lombok注释代码:
public void testCleanUp() { try { @Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream(); baos.write(new byte[] {'Y','e','s'}); System.out.println(baos.toString()); } catch (IOException e) { e.printStackTrace(); } }
至关于:
public void testCleanUp() { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { baos.write(new byte[]{'Y', 'e', 's'}); System.out.println(baos.toString()); } finally { baos.close(); } } catch (IOException e) { e.printStackTrace(); } }
使用注释实例方法@Synchronized将提示Lombok生成一个名为的私有锁定字段$lock,该方法将在执行以前锁定。相似地,以相同的方式注释静态方法将生成为$LOCK静态方法命名的私有静态对象 ,以相同的方式使用。能够经过为注释的value参数提供字段名称来指定不一样的锁定对象。提供字段名称时,开发人员必须定义属性,由于Lombok不会生成它。
Lombok注释代码:
private DateFormat format = new SimpleDateFormat(“MM-dd-YYYY”); @Synchronized public String synchronizedFormat(Date date){ return format.format(date); }
等效的Java源代码:
private final java.lang.Object $ lock = new java.lang.Object [0]; private DateFormat format = new SimpleDateFormat(“MM-dd-YYYY”); public String synchronizedFormat(Date date){ synchronized($ lock){ return format.format(date); } }
注释于方法上,用于隐藏式的Throws的Exception。
Lombok注释代码:
@SneakyThrows public void testSneakyThrows(){ throw new IllegalAccessException(); }
等效于:
public void testSneakyThrows(){ try { throw new IllegalAccessException(); } catch(java.lang.Throwable $ ex){ throw lombok.Lombok.sneakyThrow($ ex); } }
注释在类上,避免每次在使用日志的时候,须要手动在该类中定义:
private final Logger logger = LoggerFactory.getLogger(XXX.class);
http://jnb.ociweb.com/jnb/jnbJan2010.html