文章目录
- @Data
- @Slf4j与@CustomLog
- @Builder与@Accessors(chain = true)
- @Getter与@Setter
- @NoArgsConstructor与@AllArgsConstructor
- @EqualsAndHashCode
Lombok是一个Java库,它可以通过注解的方式,帮助我们生成代码。 实际开发中大家总是会粘贴某个实体类,然后保留类上的注解改吧改吧。大多数人并不会关心这些注解到底是干嘛的,同样是打日志,@Slf4j与@CustomLog有什么不同吗?
@Data
这是一个综合注解,它相当于以下注解的总和:
- @Getter
- @Setter
- @ToString
- @EqualsAndHashCode
- @RequiredArgsConstructor:生成一个带参构造函数,函数字段为所有final字段和@NonNull字段
@Slf4j与@CustomLog
这两个注解都是用于生成日志对象的。
- @Slf4j 注解会为类生成一个静态的 org.slf4j.Logger 类型的成员变量。SLF4J(Simple Logging Facade for Java)是一个日志的接口层,它不直接实现日志记录的功能,而是作为一个前端或抽象层存在。这意味着在实际运行时,你可以灵活地选择具体的日志实现框架(如Logback、Log4j2等),而无需修改代码。
- @CustomLog 是Lombok的一个特殊的特性,它允许更定制化的日志记录配置。比如需要特定命名的日志实例,或者想要直接绑定到某个特定的日志实现上
个人推荐@Slf4j,对于大多数人与大多数项目来说,它更通用,可移植性更好
@Builder与@Accessors(chain = true)
这两个都是用于简化对象创建的。@Builder的是实现Builder模式的,它会生成一个静态内部类,你可以通过构造者模式来构建对象。@Accessors是用于改变getter/setter方法的行为的,它返回的是this指针,从而实现链式调用。个人喜欢用@Builder,在《Effective Java》中关于对象的创建的建议是使用静态内部类。需要注意的是,@Builder必须在@AllArgsConstructor之前,否则@Builder会失效。
@Getter与@Setter
这两个注解用于生成字段的getter方法和setter方法。二者既可以作用在类上也可以作用在字段上,建议写在类上。一般这两个注解都会被@Data注解替代,写一个注解比写两个简单不是。
@NoArgsConstructor与@AllArgsConstructor
这两个注解都是生成构造函数。@AllArgsConstructor生成的全参的构造函数,@NoArgsConstructor生成的是无参构造函数。
@EqualsAndHashCode
这个注解用于自动生成equals和hashCode方法。 在Java中,equals方法用于比较两个对象是否相等,hashCode方法用于生成对象的哈希码。这两个方法通常需要一起被重写,以确保相等的对象具有相同的哈希码。