lombok简介
简介
在编写代码的时候,我们要常常编写很多的getter和setter方法,虽然现在的IDE很强大,可以帮我们自动生成这些代码,但是我们可以使用lombok注释来简化源代码
使用方法
@Data
@AllArgsConstructor
@Log4j
public class User {
private String userid;
private String username;
private String sex;
public void say(){
}
}
使用lombok方法很简单,分为三个步骤
1. 在需要自动生成getter和setter方法的类上,加上@Data注解
2. 在编译类路径中加入lombok.jar包
3. 使用支持lombok的编译工具编译源代码,得到的字节码文件中自动生成了getter和setter方法
其它注释
1. @val,用在局部变量前面,相当于将变量声明为final
2. @Data @ToString, @EqualsAndHashCode, 所有属性的@Getter, 所有non-final属性的@Setter和@RequiredArgsConstructor的组合,通常情况下,我们使用这个注解就足够了。
3. @NoArgsConstructor无参构造器
4. @AllArgsConstructor全参构造器
5. @ToString 生成toString方法,默认情况下,会输出类名、所有属性,属性会按照顺序输出,以逗号分割。
6. @EqualsAndHashCode 默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,也可以指定具体使用哪些属性。
7. @Getter / @Setter 上面已经说过,一般用@data就不用额外加这个注解了。可以作用在类上和属性上,放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法,放在属性上,会对该属性生成Getter/Setter方法。并可以指定Getter/Setter方法的访问级别。
8. 给方法参数增加这个注解会自动在方法内对该参数进行是否为空的校验,如果为空,则抛出NPE(NullPointerException)
9. @Cleanup 自动管理资源,用在局部变量之前,在当前变量范围内即将执行完毕退出之前会自动清理资源,自动生成try-finally这样的代码来关闭流
10. @Log 根据不同的注解生成不同类型的log对象,但是实例名称都是log,有7种可选实现类:
@Log的几种详细用法
@Log4j
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2
private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
@CommonsLog
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@JBossLog
private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
@Log
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
原理
自从Java 6起,javac就支持“JSR 269 Pluggable Annotation Processing API”规范,只要程序实现了该API,就能在javac运行的时候得到调用修改字节码
举例来说,现在有一个实现了”JSR 269 API”的程序A,那么使用javac编译源码的时候具体流程如下:
- javac对源代码进行分析,生成一棵抽象语法树(AST)
- 运行过程中调用实现了”JSR 269 API”的A程序
- 此时A程序就可以完成它自己的逻辑,包括修改第一步骤得到的抽象语法树(AST)
- javac使用修改后的抽象语法树(AST)生成字节码文件
注意点
个人认为lombok注释虽然方便但是会增加源代码的可读性,比如@val将局部变量申明为final类型,如果不会lombok的程序员看到这段代码就意识不到这点
上一篇: .Net中验证码图片生成
下一篇: 香港买改版三星手机便宜吗