lombok使用

新接触的项目,导入代码后发现编译不通过,一看错误,是报方法不存在,这些方法都是javaBean的get和set方法。最开始以为代码需要更新,后来发现并不是更新的问题。于是我想是不是加了什么特技,于是去看具体的javaBean实现,发现上面有注解,于是通过注解了解到是一个小组件"搞的鬼",它就是lombok,可以将javaBean的属性的get/set方法省略,编译时自动加上字段的get/set方法,以减少开发工作和精简代码。

 这里自己创建一个小示例来展示其功能。

首先创建代码

public class TestBean {
    private String name;
    private int age;
}

很简单的类,我希望像下面这样调用它

public class TestMain {

    public static void main(String[] args) {
        TestBean bean=new TestBean();
        bean.setAge(1);
    }
}

显然如果不加特技是会报错的

接下来就要引用lombok了,官网地址如下:

https://projectlombok.org/

官网有个视频,指导怎么使用,实际上在工程中导入了lombok.jar后只是能使用注解了,并不能真正改变编译,因此在视频之前实际上先有一个类似安装插件的过程。完整步骤如下:

1.官网下载lombok.jar

2.直接双击运行lombok.jar,会弹出一个安装界面,选择ide安装路径(我的eclipse选择eclipse.exe的路径)后点击安装

3.重启eclipse,然后工程中添加lombok.jar的引用

 

4.为javaBean的类添加@Data注解

 

按照以上步骤操作后就ok了,通过eclipse的Outline窗口也能看到类包含的方法,这里不仅生成了get/set方法,还包括了hashCode、toString,构造方法等方法。

实际上,@Data注解帮你把一切都搞好了,但是如果不需要可以使用其他注解来完成部分功能,

官方目前给出的稳定功能如下,例如如果想自动生成某一个字段的set方法只用给该字段打上@Setter即可,不过如果只是出于个别方法使用这个组件意义就不大了。

val

Finally! Hassle-free final local variables.
@NonNull

or: How I learned to stop worrying and love the NullPointerException.
@Cleanup

Automatic resource management: Call your close() methods safely with no hassle.
@Getter/@Setter

Never write public int getFoo() {return foo;} again.
@ToString

No need to start a debugger to see your fields: Just let lombok generate a toString for you!
@EqualsAndHashCode

Equality made easy: Generates hashCode and equals implementations from the fields of your object..
@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor

Constructors made to order: Generates constructors that take no arguments, one argument per final / non-nullfield, or one argument for every field.
@Data

All together now: A shortcut for @ToString, @EqualsAndHashCode, @Getter on all fields, and @Setter on all non-final fields, and @RequiredArgsConstructor!
@Value

Immutable classes made very easy.
@Builder

... and Bob's your uncle: No-hassle fancy-pants APIs for object creation!
@SneakyThrows

To boldly throw checked exceptions where no one has thrown them before!
@Synchronized

synchronized done right: Don't expose your locks.
@Getter(lazy=true)

Laziness is a virtue!
@Log

Captain's Log, stardate 24435.7: "What was that line again?"

 

 上面所有注解和功能不一一研究,下面列一下目前观察到的注意事项:

1.对于final字段,打上@Data注解后会在构造方法中自动添加该参数初始化该字段。

2.工程遇到导入lombok.jar以使用其相关功能,但是目前就用注解的情况来看,编译后发布的二进制是不再依赖lombok.jar了的,因为这些注解的功能只在编译时起作用(可以看到注解的生命周期描述为: @java.lang.annotation.Retention(value=java.lang.annotation.RetentionPolicy.SOURCE) ,即编译后会去掉的信息)。

3.注意到加过特技后TestBean的私有字段未使用的警告也会清除,对于有强迫症的人来说也ok。

 

 

安装:

  eclipse:参照上面描述

  IDEA:使用插件搜索lombok,直接安装后重启即可。pis:这种方式不需要在工程中再引用lombok的jar包,可以理解为系统直接将其加到了classpath中

 

缺点:

1.自动生成恐怕无法在get或set方法中做额外的处理了,不过对于特例可以不用其特性。

 

 

 

踩坑记录:

 

1.IDEA下 使用lombok注解Slf4j后,编译时找不到变量log

Error:(27, 9) java: 找不到符号 符号: 变量 log 位置: 类

原因推测:编译时未启动注解处理,因此没有通过此注解给class增加需要的功能。

解决办法: Preferences… > Build, Execution, Deployment > Compiler > Annotation Processors ,勾选 Enable annotation processing  ,启动注解处理

posted @ 2017-08-29 21:45  minggliu  阅读(244)  评论(0)    收藏  举报