0
点赞
收藏
分享

微信扫一扫

01-Lombok工具使用

野见 2022-04-07 阅读 20
java

lombok

课程目标:

  • 什么是lombok
  • lombok的原理
  • lombok的常用注解
  • lombok的安装
    在这里插入图片描述

官网: https://projectlombok.org/

Lombok原理

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Data {} 

在源代码阶段进行处理,生成getter() 和 setter() 方法,在生成.class文件。在javac 编译期阶段利用注解搞事情。
在这里插入图片描述
​ 先说下为什么要安装要在IDEA中安装Lombok。 如果在.java文件中有@Getter,其实在编译后的.class文件会有属性的getter方法,但如果不安装插件,那直接调用属性的getter方法会失败,虽然编译的.class文件有getter。但安装插件后就好了,不管是否编译了都可以直接调用。
在这里插入图片描述

引言

  • 还记得刚刚接触java,学习面向对象时因为手写get,set,hashcode,equals等方法的痛苦吗?
  • 还记得后来上手了Eclipse|Idea这样工具可以快速生成get,set等相关方法的兴奋吗? 好强大…
  • 后来工作时间长了,这种兴奋渐渐就变成了的苦恼?

很重要一个原因就是因为随着项目业务模块功能不断扩展,项目中涉及库表越来越多,导致项目中实体类(Entity)对象越来越多,每次写Entity对象最头疼就是生成Get,SET等相关方法,极大影响开发效率,如何更好的解决呢? lombok出现仿佛让我们回到曾经的那种喜悦!!!

lombok是什么

Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释(注解),用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类 —百度百科

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more. --摘自官网

通俗解释: lombok快速开发工具,提供了一组java相关注解,通过注解用来更快速生成java对象中我们想要的相关方法(get,set,toString …)等一系列方法

lombok第一个环境

1.引入依赖

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

2.使用提供注解

@Data
public class User {
    private String id;
    private String name;
    private Integer age;
    private Date bir;
}

@Data注解: 自动给对象提供 GET SET ToString hashCode equals 等方法

lombok一组注解

1.@Getter and @Setter

  • 可以用在类上,也可以用在方法上面。

  • 用来只生成对应GETTER 和SETTER 方法。

  • 只针对成员变量起作用, 对被static 修饰的变量完全不起作用, final 修饰的变量只生成get方法。

    @Getter
    @Setter
    public class User {
        @Getter(AccessLevel.PROTECTED)// 访问的方式,默认是public 
        private String name;
        private Integer age;
        @Getter(AccessLevel.NONE)
        @Setter(AccessLevel.NONE) // 表示不生成get 和 set 方法
        private String address;
    }
    

2.@ToString

  • 用在类上
  • 用来生成被重写的toString()方法
@ToString(exclude = {"address"}, of = {"name"})  
// exclude 表示排除哪些字段 。 of 表示必须包含哪些字段。

3.@EqualsAndHashCode

“ == ” :对于基本数据类型来说,比较的是两者的值;对于引用类型来说,比较的两者的内存地址。

“ equals ” : 对于[Object类]型来说,equals方法比较的是两者的内存地址。但很多类型都重写了equals方法,例如常用的String类型比较的就是内存地址和值。

@EqualsAndHashCode(exclude = {"address"}, of = {"name"})
// exclude 表示排除哪些字段然后对对象进行比较 。 of 表示必须包含哪些字段然后对对象进行比较 。

4.@NonNull 和 Constructor 相关

// 表示方法的参数不可以为null 值
public void test (@NonNull String s ) {
    System.out.println(s);
}

// 表示这个字段不能为 null 值
@NonNull private Integer id;
@NoArgsConstructor  // 无参的构造函数
@RequiredArgsConstructor // 被 @ NonNull 和 final 修饰的变量生成构造函数
@AllArgsConstructor // 全参的构造函数

5.@sneakythrows

// 会手动 给方法中的程序加上try catch 
@SneakyThrows
public void test2(){
    System.out.println("hello");
}

try {

} catch (Exception e){
   throw new RuntimeException(e);
}

6 .@Data注解,@Builder

  • @Data 用在类上

  • 用来生成对象中GET SET ToString HashCode equals RequiredArgsConstructor等相关方法

  • 具体用法

    @Data
    public class User {
        private String id;
        private String name;
        private Integer age;
        private Date bir;
    }
    

@builder 可以进行流式编程方式。

7.@Accessors

  • 用在类上

  • 用来给类中set方法开启链式调用 chain属性: 用来指定是否开启SET方法链式调用 true 开启 false 不开启

  • 具体用法

    @Data
    @Accessors(chain = true)
    public class User {
        private String id;
        private String name;
        private Integer age;
        private Date bir;
    }
    user.setId("21").setName("xiaochen").setAge(23).setBir(new Date());
    

8.@Slf4j 和 @Log

  • 用在类上

  • 用来快速给类中定义一个日志变量

  • 原理

    • 在对应类上加入这个注解相当于在这个类中声明了一个日志对象

      private Logger log = LoggerFactory.getLogger(this.getClass());
      
  • 具体用法

    @Controller
    @RequestMapping("user")
    @Slf4j
    public class UserController {
        @RequestMapping("findAll")
        public String findAll(){
            log.info("进入findAll方法");
            log.info("姓名:[{}],年龄:[{}]",name,age);
            return "index";
        }
    }
    

9.@CleanUp 和 val

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AmvmzwQF-1649340647350)(assets/1649340155282.png)]

@CleanUp 可以自动的关闭流 , val 可以( val map = new HashMap< String , String >())

idea中如何安装lombok

注意:默认在idea中不支持lombok语法,写上之后没有任何效果,需要在idea中额外安装插件才可以继续使用lombok

Preferences | Plugins --> 搜索lombok 下载安装 安装完成重启idea即可

在这里插入图片描述

安装完成之后出现如下问题的解决方案:

在这里插入图片描述

  • 解决方案:

在这里插入图片描述


举报

相关推荐

0 条评论