• Java-idea-常用插件-lombok


    1、插件安装

    打开perferences或者settings,找打plugins,选择Browse repositories...,搜索lombok,下载安装重启即可。

    2、支持的注解:

    2.1、@Getter and @Setter:

      可以作用在类上和属性上;放在类上,会对所有的非静态(non-static)属性生成Getter/Setter方法;放在属性上,会对该属性生成Getter/Setter方法。默认生成的方法是public的,如果要修改方法修饰符可以设置AccessLevel的值,例如:@Getter(access = AccessLevel.PROTECTED)

    2.2、@FieldNameConstants
    2.3、@ToString

      生成toString()方法,默认情况下,它会按顺序(以逗号分隔)打印你的类名称以及每个字段。可以这样设置不包含哪些字段@ToString(exclude = "id") / @ToString(exclude = {"id","name"});如果继承的有父类的话,可以设置callSuper 让其调用父类的toString()方法,例如:@ToString(callSuper = true)

    2.4、@EqualsAndHashCode

      默认情况下,会使用所有非瞬态(non-transient)和非静态(non-static)字段来生成equals和hascode方法,可以通过在可选的exclude参数中来排除更多字段。或者,通过在parameter参数中命名它们来准确指定希望使用哪些字段。
    2.5、@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor

      无参构造器、部分参数构造器、全参构造器,当我们需要重载多个构造器的时候,Lombok就无能为力了。

      @NoArgsConstructor生成一个无参构造方法。当类中有final字段没有被初始化时,编译器会报错,此时可用@NoArgsConstructor(force = true),然后就会为没有初始化的final字段设置默认值 0 / false / null。对于具有约束的字段(例如@NonNull字段),不会生成检查或分配,因此请注意,正确初始化这些字段之前,这些约束无效。
      @RequiredArgsConstructor会生成构造方法(可能带参数也可能不带参数),如果带参数,这参数只能是以final修饰的未经初始化的字段,或者是以@NonNull注解的未经初始化的字段
      @RequiredArgsConstructor(staticName = "of")会生成一个of()的静态方法,并把构造方法设置为私有的
      @AllArgsConstructor 生成一个全参数的构造方法

    2.6、@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger

      注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
    2.7、@Data【常用】

      @ToString, @EqualsAndHashCode, 所有属性的@Getter, 所有non-final属性的@Setter和@RequiredArgsConstructor的组合,
    通常情况下,我们使用这个注解就足够了。

    2.8、其他

    @Builder:为你的类生成复杂的构建器API。
    @Singular
    @Delegate:相当的牛逼,它会该类生成一些列的方法,这些方法都来自与List接口
    @Value
    @Accessors

      主要用于控制生成的getter和setter
      主要参数介绍

    • fluent boolean值,默认为false。此字段主要为控制生成的getter和setter方法前面是否带get/set
    • chain boolean值,默认false。如果设置为true,setter返回的是此对象,方便链式调用方法
    • prefix 设置前缀 例如:@Accessors(prefix = "abc") private String abcAge 当生成get/set方法时,会把此前缀去掉

    @Wither:提供了给final字段赋值的一种方法

    @Cleanup:关闭流 
    @Synchronized:给方法加上同步锁,对象同步 
    @SneakyThrows:抛出异常
    from Intellij 14.1 @val
    from Intellij 15.0.2 @var
    from Intellij 14.1 @var
    from Intellij 2016.2 @UtilityClass
    Lombok config system
    Code inspections
    Refactoring actions (lombok and delombok)

    3、配置注解处理器

    在perferences或Settings设置页面,点击【Build,Execution,Deployment】-->选择Compiler-->选中Annotation Processors,然后在右侧勾选Enable annotation processing即可。

    注意。每个项目都需设置此项,如果不配置此项lombok注解不会生效。

    4、引用pom

            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.18</version>
                <scope>provided</scope>
            </dependency>

    5、程序使用

    主要使用步骤2中注解

    6、原理

    1.运行时解析
    运行时能够解析的注解,必须将@Retention设置为RUNTIME,这样可以通过反射拿到该注解。java.lang.reflect反射包中提供了一个接口AnnotatedElement,
    该接口定义了获取注解信息的几个方法,Class、Constructor、Field、Method、Package等都实现了该接口,大部分开发者应该都很熟悉这种解析方式。

     View Code

    2.编译时解析

    2.1、Annotation Processing Tool
      apt自JDK5产生,JDK7已标记为过期,不推荐使用,JDK8中已彻底删除,自JDK6开始,可以使用Pluggable Annotation Processing API来替换它,
    apt被替换主要有2点原因:
    api都在com.sun.mirror非标准包下
    没有集成到javac中,需要额外运行
      apt的更多介绍可以参见这里。
    2.2、Pluggable Annotation Processing API
      JSR 269,自JDK6加入,作为apt的替代方案,它解决了apt的两个问题,javac在执行的时候会调用实现了该API的程序,这样我们就可以对编译器做一些增强,
    这时javac执行的过程如下: 这里写图片描述 

      Lombok就是使用这种方式实现的,有兴趣的话可以去看看其Lombok源码,对应注解的实现都在HandleXXX中,
    比如@Getter注解的实现是HandleGetter.handle()。
    还有一些其它类库使用这种方式实现,比如Google Auto、Dagger等等。

     缺点:无法支持多种参数构造器的重载

  • 相关阅读:
    GetDlgItem
    vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
    C #中的几个线程同步对象方法 zz
    vc中调用exe的方法
    函数PlaySound和sndPlaySound的用法
    Radio Button的使用
    用Event实现线程同步
    C++学习随笔之九:类和动态内存分配
    C++学习随笔之七:对象和类
    C++学习随笔之二:数据处理
  • 原文地址:https://www.cnblogs.com/bjlhx/p/10045446.html
Copyright © 2020-2023  润新知