目录

1.lombok的引入

2.@Slf4j注解:简化日志代码

3.@Getter, @Setter, @Data 注解:简化实体类代码

4.lombok的其他注解


 

springboot集成lombok

lombok是spring提供的一个组件,并不是springboot特有的,里面提供了很多注解,可以简化我们的代码.

我们今天主要演示lombok简化日志代码的@Slf4j注解,和简化实体的set/get方法的@Data注解

 

1.lombok的引入

我们在springboot项目中演示

spring boot集成积木 springboot集成lombok_spring boot集成积木

 

1.添加依赖

<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>

 

2.idea使用lombok需要安装lombok插件,否则无法使用lombok的注解

安装链接:

此链接里还介绍了一些lombok中的注解的使用,可以了解一下。

 

2.@Slf4j注解:简化日志代码

上一篇文章里,讲的使用AOP统一处理web请求日志的代码中,引用了log4j依赖,每一个类中如果需要单独打印日志,还需要获取Logger对象才可以打印日志:

private static final Logger logger = LoggerFactory.getLogger(XXXXXX.class);

每一个类中都需要添加这么一行代码才可以添加日志,这样也太复杂了,于是lombok提供了@Slf4j注解,可以直接使用logger对象,而不用再获取此对象了,简化了代码。

 

1.创建一个LombokController类

package com.itmayiedu.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class LombokController {
    
    @RequestMapping("/printLog")
    public String printLog(String name,Integer age) {
        log.info("打印日志:name = " + name + ",age = " + age);
        return "我的第一个springboot项目";
    }
}

2.浏览器访问


spring boot集成积木 springboot集成lombok_spring_02


3.控制台打印日志

spring boot集成积木 springboot集成lombok_spring boot集成积木_03

 

3.@Getter, @Setter, @Data 注解:简化实体类代码

1.我们平时写一个实体类,定义属性之后,还要写对应的get/set方法

创建一个entity包下的UserEntity实体类

spring boot集成积木 springboot集成lombok_spring boot集成积木_04

package com.itmayiedu.entity;

public class UserEntity {

    // 定义属性
    private String name;
    private Integer age;

    // get/set方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

 

2.在LombokController类中新增一个getUser方法,里面调用了实体类的get/set方法

package com.itmayiedu.controller;

import com.itmayiedu.entity.UserEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class LombokController {

    @RequestMapping("/getUser")
    public String getUser(String name,Integer age) {
        UserEntity userEntity = new UserEntity();
        userEntity.setName(name);
        userEntity.setAge(age);
        log.info("打印日志:" + userEntity.toString());
        return "SUCCESS";
    }
}

 

3.这种是我们常用的实体类,需要定义get/set方法,lombok提供了@Getter,@Setter注解,这样就可以替代掉代码中的get/set方法,LombokController类中依然可以调用实体类的get/set方法。

注:我们编译之后的class文件,依然是get/set方法,注解只是简化我们的代码,底层实际上没有改变。

package com.itmayiedu.entity;

import lombok.Getter;
import lombok.Setter;

public class UserEntity {

    // 定义属性
    @Getter
    @Setter
    private String name;

    @Getter
    @Setter
    private Integer age;
    
}

定义在类上也可以

package com.itmayiedu.entity;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class UserEntity {

    // 定义属性
    private String name;

    private Integer age;

}

 

4.@Data注解不但可以定义get/set方法,还有toString等方法

package com.itmayiedu.entity;

import lombok.Data;

@Data
public class UserEntity {

    // 定义属性
    private String name;

    private Integer age;

}

 

5.浏览器访问getUser接口


spring boot集成积木 springboot集成lombok_spring boot集成积木_05


 

6.控制台日志打印

spring boot集成积木 springboot集成lombok_spring_06

 

7.所以,我们最终简化实体类代码,使用@Data注解即可,不用使用@Getter,@Setter注解了

 

 

4.lombok的其他注解:

  • @Data : 自动生成set/get方法,toString方法,equals方法,hashCode方法,不带参数的构造方法
  • @NotNull : 让你不在担忧并且爱上NullPointerException
  • @CleanUp : 自动资源管理:不用再在finally中添加资源的close方法
  • @Setter/@Getter : 自动生成set和get方法
  • @ToString : 自动生成toString方法
  • @EqualsAndHashcode : 从对象的字段中生成hashCode和equals的实现
  • @NoArgsConstructor/@RequiredArgsConstructor/@AllArgsConstructor 自动生成构造方法
  • @Value : 用于注解final类
  • @Builder : 产生复杂的构建器api类
  • @SneakyThrows : 异常处理(谨慎使用)
  • @Synchronized : 同步方法安全的转化
  • @Getter(lazy=true) :
  • @Log : 支持各种logger对象,使用时用对应的注解,如:@Log4