Lombok: 可以让pojo类代码简洁, 通过注释完成构造方法,set、get等的操作
@DATA // 自动生成set和get
mybatisplus : 基础的数据库crud、分页等可以自动生成
swaggerUI: 接口文档自动生成,对接前端和测试更加方便
创建springboot项目引入springweb的依赖
1、lombok插件
org.projectlombok
lombok
true
1.18.6
provided provided 表示只是在编译的时候生效,而不会在项目的jar包
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