1.Lombok注解:
2.idea安装lombox插件和导入lombox的jar包:
安装插件:
pom.xml引入jar包:
3.Lombox的优缺点:
优点:
1.通过注解自动生成样板代码,提高开发效率
2.代码简洁,只关注相关属性
3.新增属性后,无需刻意修改相关方法
缺点:
1.降低了源代码的可读性和完整性
2.加大对问题排查的难度
3.需要IDE的相关插件的支持
@Getter:(为属性生成get方法,可以用在类或者属性上面,在类上表示类中所有属性都生成get方法)
package com.mystudy.elastic.job.springboot;
import lombok.AccessLevel;
import lombok.Getter;
import javax.validation.constraints.NotNull;
/**
* @Getter注解(可以用在类或者属性上面,在类上表示类中所有属性都生成get方法)
* 为属性生成get方法
*/
public class GetterTest {
//自动生成getName()方法,此方法为public
@Getter
private String name;
//自动生成getAge()方法,而且此方法为private,而且是@NotNull
@Getter(value = AccessLevel.PACKAGE,onMethod_ = {@NotNull})
private String age;
//自动生成getPhone()方法,此方法为public,而且懒加载
@Getter(lazy = true)
private final String phone = "1243543";
}
@Setter注解(为属性生成set方法,可以用在类或者属性上面,在类上表示类中所有属性都生成set方法)
package com.mystudy.elastic.job.springboot;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotNull;
/**
* @Setter注解(可以用在类或者属性上面,在类上表示类中所有属性都生成set方法)
* 为属性生成set方法
*/
public class SetterTest {
//自动生成setName()方法,此方法为public
@Setter
private String name;
//自动生成setAge()方法,而且此方法为private,而且是@NotNull
@Setter(value = AccessLevel.PACKAGE,onMethod_ = {@NotNull})
private String age;
}
@ToString注解(作用在类上,生成toString方法)
package com.mystudy.elastic.job.springboot;
import lombok.ToString;
/**
* @ToString注解(作用在类上)
* 生成toString方法
* includeFieldNames = false表示生成的toString方法没有属性名,只有属性值
* exclude = {"field1"}表示toString方法里面排除field1
* of = {"field1"}表示toString方法里面只有field1
* doNotUseGetters = true表示不适应getter
*/
@ToString(
includeFieldNames = false,
exclude = {"field1"},
of = {"field1"},
doNotUseGetters = true
)
public class ToStringTest {
private String field1;
private String field2;
}
@EqualsAndHashCode注解(作用在类上,生成Equals方法和HashCode方法)
package com.mystudy.elastic.job.springboot;
import lombok.EqualsAndHashCode;
/**
* @EqualsAndHashCode注解(作用在类上)
* 生成Equals方法和HashCode方法
* exclude = {"field1"} 生成的Equals方法和HashCode方法排除field1属性
*/
@EqualsAndHashCode(
exclude = {"field1"}
)
public class EqualsAndHashCodeTest {
private String field1;
private String field2;
}
@Data注解(大而全的注解:包含@Getter,@Setter,@ToString,@EqualsAndHashCode)
package com.mystudy.elastic.job.springboot;
import lombok.Data;
/**
*
* @Data注解(大而全的注解:包含@Getter,@Setter,@ToString,@EqualsAndHashCode)
*
*/
@Data
public class DataTest {
private String name;
private String age;
}
@val注解(弱语言变量)
package com.mystudy.elastic.job.springboot;
import lombok.val;
import java.util.ArrayList;
/**
* @val注解
* 弱语言变量
*/
public class ValTest {
public ValTest() {
val field = "zhangxiaoxi";
val list = new ArrayList<String>();
list.add("zhangxiaoxi");
}
}
@NotNull注解(作用在属性上,或者参数上, 生成非空检查)
package com.mystudy.elastic.job.springboot;
import lombok.NonNull;
/**
* @NotNull注解(作用在属性上,或者参数上) 生成非空检查
*/
public class NonNullTest {
public NonNullTest(@NonNull String field) {
System.out.println(field);
}
}
** @AllArgsConstructor注解:生成有所有参数的构造方法
@NoArgsConstructor注解:生成没有参数的构造方法
@RequiredArgsConstructor注解:生成有部分参数的构造方法**
package com.mystudy.elastic.job.springboot;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import javax.validation.constraints.NotNull;
/**
* @AllArgsConstructor注解:生成有所有参数的构造方法
* @NoArgsConstructor注解:生成没有参数的构造方法
* @RequiredArgsConstructor注解:生成有部分参数的构造方法
*/
//@AllArgsConstructor
//@NoArgsConstructor
@RequiredArgsConstructor
public class ConstructorTest {
private final String field1;
@NotNull
private String field2;
private String field3;
}
@Cleanup注解 资源关闭
package com.mystudy.elastic.job.springboot;
import lombok.Cleanup;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* @Cleanup注解 资源关闭
*/
public class CleanupTest {
public void copyFile(String in, String out) throws Exception {
@Cleanup FileInputStream fileInputStream = new FileInputStream(in);
@Cleanup FileOutputStream fileOutputStream = new FileOutputStream(out);
int r;
while ((r = fileInputStream.read()) != -1){
fileOutputStream.write(r);
}
}
}
@Builder注解:简化对象创建过程
@Singular注解:配合@Builder注解,简化集合类型操作
package com.mystudy.elastic.job.springboot;
import lombok.Builder;
import lombok.Data;
import lombok.Singular;
import java.util.ArrayList;
import java.util.List;
/**
* @Builder注解:原来默认的值不会被带过来,必须手动重新赋值
* @Singular注解:
*/
@Builder
@Data
public class BuilderTest {
//静态属性:不能赋值
private static String staticField;
//final属性
private final String finalField;
//已初始化的Fina1字段:不能赋值
private final String initFinalField = "已初始化的final字段!";
//普通属性
private String field;
//集合类属性
@Singular
private List<String> listFields;
public static void main(String[] args) {
BuilderTest builderTest = BuilderTest
//builder创建一个可以链式赋值的对象
.builder()
//为这个对象的”每个”字段赋值
.finalField("手动赋值finalField字段")
.field("手动赋值field字段")
//有@Singular才有下面的listField
.listField("lili")
.listFields(new ArrayList<>())
//build方法来创建对象。此时创建出来的对象,是不可变的! !
.build();
System.out.println(builderTest.toString());
}
}
@slf4j注解:简化日志引入方式(完成日志的输出)
pom.xml导入对应的jar包:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14
</artifactId>
<version>1.7.30</version>
<scope>test</scope>
</dependency>
package com.mystudy.elastic.job.springboot;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
/**
* @Slf4j注解(完成日志的输出)
*/
@Slf4j
public class LogTest {
@Test
public void func(){
log.error("日志!!!");
}
}