Lombok
作用:帮使用者提高编码效率,减少重复与冗余的代码
原理:ASM 动态修改class文件
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.8</version> </dependency> <build> <plugins> <plugin> <groupId>org.projectlombok</groupId> <artifactId>lombok-maven-plugin</artifactId> <version>1.16.6.1</version> </plugin> </plugins> </build>
@Setter
@Getter
@ToString
@Getter(lazy = true) //懒加载
private final List<Integer> ids = Arrays.asList(1, 2, 3, 4); private String name;
@EqualsAndHashCode //生成equals方法与hashCode方法
public class LombokDemo
@NoArgsConstructor //添加一个无参构造函数
@AllArgsConstructor 添加一个所有参数的构造函数
@RequiredArgsConstructor //生成一个包含必填参数的构造函数,要与@NonNull 搭配使用,该注解修饰的属性就是必填参数
public class LombokDemo {
@NonNull private Integer id; private String name;
}
@Data
这是一个综合注解了,等于同时使用
@Getter
,@Setter
,@ToString
,@EqualsAndHashCode
,@RequiredArgsConstructor
@Value
创建不变类
扩展:不可变类是指创建该类的实例后,该实例的实例变量是不可改变的。Jav提供的8个包装类和java.lang.String类都是不可变类。
@Accessors
这个注解要搭配@Getter与@Setter使用,用来修改默认的setter与getter方法的形式
日志相关
@Log4j
public class LombokDemo {
private static final Logger log = Logger.getLogger(LombokDemo.class);
@Slf4j
public class LombokDemo {
private static final Logger log = LoggerFactory.getLogger(LombokDemo.class);
设计模式相关
@Builder //通过建造者模块来生成bean
@Builder public class LombokDemo { private Integer id; private String name; }
扩展:
建造模式:
在开发过程,有的时候会出现一个复杂对象的创建工作,这个对象一般组装模式固定,但是其中的参数会变
builder.installOS("CentOS").installLanguage("Java").installServer("Tomcat").installDatabase("Mysql");
@Delegate注释的属性,会把这个属性对象的公有非静态方法合到当前类
public class LombokDemo { @Delegate private Integer id; private String name; }
举例:
public short shortValue() { return this.id.shortValue(); } public int intValue() { return this.id.intValue(); }
工具相关:
给方法加一个同步块
@Synchronized public void test() throws IOException { System.out.println("test"); }
设置不能为空的参数
public void test(@NonNull String val) { }