好处:简化代码,增强代码可读性,提高开发效率。注解类型为Source,源码中显示,编译之前丢失,转化为具体代码。其实他的魅力并不在于帮助我们简单的编写对应的getter或者更多的方法,还有一点在于,当我们的字段发生改变时,lombok也会对相应的getter方法进行改变。
1.安装插件LomBok Plugin
2.配置idea编译器,支持注解编译
3.引入Lombok依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
scope=provided,说明它在编译阶段生效,不需要打入包中。Lombok在编译期将java文件正确的编译为完成的Class文件。
4.使用
ALT+7打开类的结构图我们可以看到ComBok的@Data帮我们自动生成了常用代码
5.注解和代码进行转换查看
具体的在对应java文件上右键--Refactor 中我们可以看到lombok和delombok
6.Lombok注解详解
@Data
注解源码如下:
package lombok; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.TYPE) @Retention(RetentionPolicy.SOURCE) public @interface Data { String staticConstructor() default ""; }
我们看源码及其注释发现
1.用处:TYPE(类,接口(包括注解类型),枚举)
2.注解类型 SOURCE(源码中显示,编译之前丢失并且转化为具体代码)
3.属性staticConstructor ,默认为空串,没有静态工厂方法,构造共有。而注解中介意我们staticConstructor赋值“of”:作用是私有构造,用静态工厂方法of()创建实例。
@Getter
注解源码如下:
package lombok; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.FIELD, ElementType.TYPE}) @Retention(RetentionPolicy.SOURCE) public @interface Getter { lombok.AccessLevel value() default lombok.AccessLevel.PUBLIC; AnyAnnotation[] onMethod() default @AnyAnnotation; boolean lazy() default false; @Deprecated @Retention(RetentionPolicy.SOURCE) @Target({}) @interface AnyAnnotation {} }
我们看源码及其注释发现
1.用处:TYPE(为所有字段生成getter方法) FIELD(为注解字段生成getter方法)
2.注解类型:SOURCE
3.属性
value :控制getter方法的级别 默认public
lombok.AccessLevel value() default lombok.AccessLevel.PUBLIC; public enum AccessLevel { PUBLIC, MODULE, PROTECTED, PACKAGE, PRIVATE, /** Represents not generating anything or the complete lack of a method. */ NONE; }
value设置为NONE可以不生成这个字段的getter方法,MODULE,PACKAGE都是生成的默认方法级别
AnyAnnotation[] onMethod() default @AnyAnnotation;
boolean lazy() default false;
其他注解类似。