lombok 简介

Lombok: 可以让pojo类代码简洁, 通过注释完成构造方法,set、get等的操作

@DATA  // 自动生成set和get

mybatisplus : 基础的数据库crud、分页等可以自动生成

swaggerUI: 接口文档自动生成,对接前端和测试更加方便

创建springboot项目引入springweb的依赖

1、lombok插件

 

   <!--简化bean代码的工具包 会生成一系列的get和set方法-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <version>1.18.6</version>
            <scope>provided</scope>  provided 表示只是在编译的时候生效,而不会在项目的jar包
        </dependency>

lombok在编译的时候将带有lombok注解的java文件正确编译为完整的class文件。

添加idea工具对lombok的支持,

 点击file--setting--plugin--搜索lombok 然后安装

开启注解处理 enable annotation processing  之后需要重启idea;

mvn compile  编译代码

lombok插件的原理: 

方法1、在编译阶段利用annotation processor 对自定义的注解进行预处理后生成真正在jvm上面执行的class文件     JSR269 插件化注解处理

方法2、利用反射技术在运行的时候动态修改。

/**
 *   @RequiredArgsConstructor 会生成没有复制的final类型生产构造函数,且这个final必须
 *   被@nonNull 修饰,不能与无参构造的注解同时存在
 */
@Setter
@Getter
@NoArgsConstructor  // 生成无参的构造函数
@AllArgsConstructor // 生成带参构造函数

@ToString // 重写tostring方法
@EqualsAndHashCode // 表示重写equal和hashcode方法,默认是对所有的属性,用exclude参数来排除,of参数指明包含的
// @EqualsAndHashCode(of = {"name","id}) 表示只需要id和name一样,则两个对象就是一样的
/**
@ToString(exclude ={"phone"} )  排除哪些
@ToString(of = {"name"})  包含哪些
*/
public class User {
    /**
     * 注意细节点: 1、final属性只有get方法,不会有set方法
     *           2、 静态变量不会有get、set方法
     */

    @Setter(AccessLevel.PROTECTED) // 设置后编译的set方法是私有的
    private int id;

    private final  String name = "llp";

    private String email;

    private String phone;

    private String pwd;

    private Date createTime;

    private void login(@NonNull String pwd){
        // TODO    // 加入注解后可以省略后面的判断

//        if(pwd!=null){
//            // something to do
//        }else {
//            throw new NullPointerException();
//        }


    }
}
@Data = @ToString + @EqualsAndHashCode + @Getter + @setter + @RequiredArgsConstructor

建造者模式:

当一个bean类重载了多个构造方法的时候,并且参数随机使用的时候,考虑使用构造者模式

@Builder  // 将这个注解加载类上
// 编译后生成这个方法 
 public static User.UserBuilder builder() {
        return new User.UserBuilder();
    }
//使用的时候,其中User是类名,通过类名调用builder方法,
//再调用属性给对应的属性复制,最后调用build方法
User.builder.id(1).name("ll").phone("110").build()

 

@Log
@Slf4j
// 作用于类上,生成日志变量,用于记录日志
@Service
@Slf4j
public class UserServiceImpl implements UserService {
    
    @Override
    public void login(String pwd, String phone) {
        log.info("用于登录 : {}" ,phone);  // 日志打印
    }
}

// 加入注解后悔生成这行代码
 private static final Logger log = LoggerFactory.getLogger(UserServiceImpl.class);

lombok的优缺点以及使用场景

1、 lombok要求在idea中安装对应的插件,如果项目中一个人使用了lombok则都要使用

2、代码的可读性和可调式性低

@Data 默认在重写equalandhashcode的时候,只比较本类中的,不会比较父类中的属性

一般适用于业务项目,不适应于开发中间件

// Lombok 的常用注解

@Setter + @Getter + @NonNull  + @NoArgsConstructor + @AllArgsConstructor 
@ToString + @EqualAndHashCode + @Data + @Builder + @Log + @Slf4j

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zero _s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值