title | date | tags | categories | ||
---|---|---|---|---|---|
Lombok |
2018-12-20 02:25:56 -0800 |
|
|
目录 start
目录 end|2020-04-27 23:42|
简化 JavaBean 省去了 Setter Getter toString hashCode 等方法,提供 生成构造器 Builder Log 等功能
破坏了阅读代码的完整性, 当使用了构造器这样的注解, 如果想通过看构造器的引用方来找到调用方, 这时候是没有办法的 只能通过查看类的所有引用方再一个个找
常见IDE都没有原生支持, 必须要安装对应的插件才能正常编译运行项目
Lombok在IDE中安装插件是为了编译和构建中能够动态的添加Getter Setter 等方法 而在Maven或者Gradle中添加是为了引入注解的包
取决于团队风格,用不用都不是大问题Java14
新出的record
类型也能满足lombok部分需求
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
配置编译插件
<!--lombok-->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<target>1.8</target>
<source>1.8</source>
<encoding>UTF-8</encoding>
<compilerId>groovy-eclipse-compiler</compilerId>
<verbose>true</verbose>
<fork>true</fork>
<compilerArguments>
<javaAgentClass>lombok.launch.Agent</javaAgentClass>
</compilerArguments>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-compiler</artifactId>
<version>2.9.3-01</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-batch</artifactId>
<version>2.5.0-01</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
</dependencies>
</plugin>
添加依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
annotationProcessor 'org.projectlombok:lombok:1.18.2'
compileOnly 'org.projectlombok:lombok:1.18.2'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.2'
testCompileOnly 'org.projectlombok:lombok:1.18.2'
注解 | 范围 | 功能 |
---|---|---|
@Data | 类 | Getter Setter RequiredArgsConstructor ToString EqualsAndHashCode 的集合 |
@Setter | 类 | 为属性提供 setter 方法 |
@Getter | 类 | 为属性提供 getter 方法 |
@NoArgsConstructor | 类 | 为类提供一个无参的构造方法 |
@AllArgsConstructor | 类 | 为类提供一个全参的构造方法 |
@Builder | 类 方法 构造器 | 生成 构造器模式 模板代码 |
@Delegate | 属性,方法 | 将属性的方法委派到当前对象上 常用于嵌套的POJO |
- @CommonsLog
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
- @Flogger
private static final com.google.common.flogger.FluentLogger log = com.google.common.flogger.FluentLogger.forEnclosingClass();
- @JBossLog
private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
- @Log
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
- @Log4j
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
- @Log4j2
private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
- @Slf4j
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
- @XSlf4j
private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);
Lombok的注解都是编译期源码注解(RetentionPolicy.SOURCE), 运行期是拿不到这些注解的