zoukankan      html  css  js  c++  java
  • Java编码辅助工具:Lombok —— 避免重复臃肿的代码,提高效率

    在项目开发过程中,经常会涉及到一些调整很少但又必不可少的环节,比如实体类的Getter/Setter方法,ToString方法等。这时可以使用Lombok来避免这种重复的操作,减少非核心代码的臃肿,提高编码效率。

    如何在IntelliJ IDEA中引入Lombok

    1. 安装Lombok 插件(否则在调用setter/getter方法时IDE会提示报错): File -> Settings -> Plugins   搜索Lombok Plugin完成安装。
    2. pom.xml中引入lombok依赖(其中<scope>provided</scope>表示只在编译、测试阶段依赖该jar,运行阶段不依赖(如运行容器中已包含了该jar,则置为provided避免jar冲突),默认<scope>compile</scope>则表示在编译、测试、运行阶段都依赖):
     <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
            <scope>provided</scope>
    </dependency>

      

    Lombok注解用途 (参考:https://blog.csdn.net/vbirdbest/article/details/79495398)

    @Getter/@Setter

    为字段生成Getter和Setter方法,可以注解到字段或者类上(注解在类上会为类中所有字段生成Getter和Setter方法)。默认是public类型的,如果需要的话可以修改方法的访问级别: @Getter(AccessLevel.PROTECTED) 

    Lombok中的注解一般都会包含一个无参构造函数注解@NoArgsConstructor(用于生成无参构造函数) ,所以还会额外生成一个无参构造函数

    @NonNull

    调用字段的setter方法时,如果传的参数为null,则会抛出空异常NullPointerException,生成setter方法时会检查参数是否为空

    @NoArgsConstructor

    生成一个无参构造方法。当类中有final字段没有被初始化时,编译器会报错,此时可用@NoArgsConstructor(force = true),然后就会为没有初始化的final字段设置默认值 0 / false / null, 这样编译器就不会报错。对于具有约束的字段(例如@NonNull字段),不会生成检查或分配,因此请注意,正确初始化这些字段之前,这些约束无效。

    @RequiredArgsConstructor

    生成构造方法(可能带参数也可能不带参数),如果带参数,这参数只能是以final修饰的未经初始化的字段,或者是以@NonNull注解的未经初始化的字段。

    @RequiredArgsConstructor(staticName = “of”)会生成一个of()的静态方法,并把构造方法设置为私有的

    @AllArgsConstructor

    生成一个全参数的构造方法

    @ToString

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

    @EqualsAndHashCode

    生成hashCode()和equals()方法,默认情况下,它将使用所有非静态,非transient字段。但可以通过在可选的exclude参数中来排除更多字段。或者,通过在of参数中命名它们来准确指定希望使用哪些字段。

    // exclude 排除字段
    @EqualsAndHashCode(exclude = {“password”, “salt”})

    // of 指定要包含的字段
    @EqualsAndHashCode(of = {“id”, “phone”, “password”})

    @Data

    @Data 包含了 @ToString、@EqualsAndHashCode、@Getter / @Setter和@RequiredArgsConstructor的功能

    @Value

    @Value 将字段都变成不可变类型:使用final修饰, 同时还包含@ToString、@EqualsAndHashCode、@AllArgsConstructor 、@Getter(注意只有Getter没有Setter)

    @Log

    生成log对象,用于记录日志,可以通过topic属性来设置getLogger(String name)方法的参数 例如 @Log4j(topic = “com.xxx.service.xxx”),默认是类的全限定名,即 类名.class,log支持以下几种:

    @Log              java.util.logging.Logger
    @Log4j           org.apache.log4j.Logger
    @Log4j2         org.apache.logging.log4j.Logger
    @Slf4j             org.slf4j.Logger
    @XSlf4j          org.slf4j.ext.XLogger
    @CommonsLog     org.apache.commons.logging.Log
    @JBossLog            org.jboss.logging.Logger

    @Log
        private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
    @Log4j
        private static final Logger log = org.apache.log4j.Logger.Logger.getLogger(UserService.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);
    

    @SneakyThrows

    使用try catch 修饰方法,来捕获异常, 默认捕获的是Throwable异常,也可以设置要捕获的异常:@SneakyThrows(InterruptedException.class)

    @Synchronized

    给方法加上同步锁

    @Cleanup

    主要用来修饰 IO 流相关类, 会在 finally 代码块中对该资源进行 close();

    @Getter(lazy = true)

    标注字段为懒加载字段,懒加载字段在创建对象时不会进行初始化,而是在第一次访问的时候才会初始化,后面再次访问也不会重复初始化

    @Wither

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

    @Builder

    为你的类生成复杂的构建器API。

     @Delegate

    为List类型的字段生成一大堆常用的方法,其实这些方法都是List中的方法 。注意:一个类中只能使用一个@Delegate注解,因为使用多个会生成多个size()方法,从而会编译报错。

  • 相关阅读:
    C#中 @ 的用法
    ASP.NET页面间传值
    ASP.NET中常用的文件上传下载方法
    把图片转换为字符
    把图片转换为字符
    JavaScript 时间延迟
    Using WSDLs in UCM 11g like you did in 10g
    The Definitive Guide to Stellent Content Server Development
    解决RedHat AS5 RPM安装包依赖问题
    在64位Windows 7上安装Oracle UCM 10gR3
  • 原文地址:https://www.cnblogs.com/spec-dog/p/9946380.html
Copyright © 2011-2022 走看看