一、开发环境准备和新版SpringBoot2.X.X项目创建
https://spring.io/projects/spring-boot
单击Spring Initializr 在线编写:https://start.spring.io/
生成解压后
打开IDEA
选择工程:
注意: 有些包maven下载慢,等待下载如果失败
当前项目仓库地址修改
maven-ali
http://maven.aliyun.com/nexus/content/groups/public//
true
true
always
fail
public
aliyun nexus
http://maven.aliyun.com/nexus/content/groups/public/
true
false
将上面的复制到pom.xml文件中
再重新导入包
运行时,发生只能是8!
二、POJO类的提效利器Lombok插件IDEA安装
简介:讲解lombok的介绍和安装
官网:https://projectlombok.org/
2.1什么lombok
一个优秀的Java代码库,简化了Java的编码,为Java代码的精简提供了一种方式
你是否发现每个JavaBean都会写getter,setter,equals,hashCode和toString的模板代码,2.2特别的多于没技术
lombok消除Java的冗长代码,尤其是对于简单的Java对象,只要加上注解就行
2.3使用方式:项目添加依赖进行版本管理
org.projectlombok
lombok
1.18.20
provided
添加IDE工具对Lombok的支持
点击File-- Settings设置界面,安装Lombok插件,然后重启idea
IDEA⾥需要在设置中启⽤annotation processors,记得重启IDEA!!!!
三、Lombok插件玩转注解Setter/Getter实战
生成getXXX和setXXX,toString方法
public class User {
private int id;
private String name;
private String email;
private String phone;
private Date createTime;
查看字节码
删除刚才生成的getXXX和setXXX,toString方法
编译查看字节码 mvn compile
在编写代码中写入注解
再次修改注解
编译查看字节码 mvn compile
四、Lombok插件玩转NonNull+构造函数注解ArgsConstructor实战
@NonNull作用于方法上或者属性,用于非空判断,如果为空则抛异常
public void login(@NonNull String pwd){
System.out.println(pwd);
}
编译查看字节码 mvn compile
@NoArgsConstructor 生成无参构造器
@AllArgsConstructor 生成全参构造器
编译查看字节码 mvn compile
@RequiredArgsConstructor
指定参数的构造函数,有以下的特征的字段
final类型未被初始化的属性, 标记了@NonNull的属性
注意:@NoArgsConstructor不能加
字节码:
五、Lombok插件原理-对比反射技术
Lombok插件原理就是: JSR 269插件化注解处理
JSR是Java Specification Requests的缩写,意思是Java 规范提案。
是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。
任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。
使用Annotation Processing自定义注解是在编译阶段进行修改
JDK的反射技术是在运行时动态修改
结论:反射更加灵活一些但是带来的性能损耗更加大
六、精通Lombok插件+Java面试核心巩固
讲解lombok的toString()注解
java bean对象为啥要重新toString方法?
User user =new User("米克");
System.out.println(user);
//显示
net.hlx.shop0907.vo.User@5caf905d
@ToString
作用于类,覆盖默认的toString()方法
字节码编译mvn compile
User(id=0, name=米克, email=null)
不包括某个字段:@ToString(exclude = {"name"})
字节码编译mvn compile
User(id=0, email=null)
只输出某个字段:@ToString(of = {"name"})
字节码编译mvn compile
七、 Java核心面试题-重温hashcode和equal方法
为什么对象要重写hashcode和equal方法?
HashCode⽅法
Equals⽅法
解析
如果两个对象相等,那么它们的hashCode()值一定相同(这里的相等是指,通过equals()比较两个对象时返回true)
如果两个对象hashCode()相等,它们并不一定相等。在散列表中hashCode()相等,即两个键值对的哈希值相等。
然而哈希值相等,并不一定能得出键值对相等,就出现所谓的哈希冲突场景,还需判断equals⽅法判断对象是否相等
应用场景:当向集合中插⼊对象时,如何判别在集合中是否已经存在该对象,⽐如Set确保存储对象的 唯⼀,并判断是不是同个对象呢?
依据hashCode和equals进⾏判断
所以Set存储的对象必须重写这两个⽅法 判断两个对象是否⼀样
⾸先判断插⼊obj的hashcode值是否存在,hashcode值不存在则直 接插⼊集合
值存在则还需判断equals⽅法判断对象是否相等
在User类中右键|
八、Lombok插件玩转对象匹配EqualsAndHashCode注解
玩转lombok的EqualsAndHashCode注解
@EqualsAndHashCode
作用于类,覆盖默认的equals和hashCode, 作用于全部属性
字节码编译mvn compile
不包括某个属性:@EqualsAndHashCode(exclude = {"id",”name”})
只输出某个属性:@EqualsAndHashCode(of = {"id","name"})
测试:
如果编号都是1,则结果又不同:
九、玩转Lombok插件多注解集合配置Data-项目常用
@Data, 定义⼀个⼲净的类,增加此注解,mvn compile查看字节码
作⽤于类上,是以下注解的集合
@ToString
@EqualsAndHashCode
@Getter
@Setter
@RequiredArgsConstructor
十、设计模式之建造者模式和Lombok注解@Builder
构造者模式:又称之为建造者模式
场景:当一个bean类重载了多个构造方法时,并且参数随机使用时,考虑使用构造者模式
谷歌的开源的protobuf协议生产的java bean赋值就是采用建造者模式
@Builder注解:作用在类上
字节码编译mvn compile
测试:
十一、Log日志输出打印更方便Lombok注解@Log-@Slf4j
玩转lombok的@Log日志注解
1)@Log / @Slf4j:作用于类上,生成日志变量, 用于记录日志
2)如果不生效,记得检查下面的配置,另外重新更新下lombok插件,重启idea
开始按照创建的那边,记得开启annotion processing
字节码编译mvn compile
Lombok总结
缺点:
1)Lombok的使⽤要求⼀定要在IDE中安装对应的插件,如果项⽬组中有⼀个⼈使⽤了Lombok则都要⽤
2)代码可读性,可调试性低,⽐如想知道某个类中的某个属性的getter⽅法都被哪些类引⽤
3)影响升级,如果升级到某个新版本的JDK的时候,如果其中的特性在Lombok中不⽀持的话就会受到影响
4)注意常⻅的细节点
比如只使用了@Data,而不使用@EqualsAndHashCode(callSuper=true)的话,会默认是@EqualsAndHashCode(callSuper=false),这时候生成的equals()方法只会比较子类的属性,不会考虑从父类继承的属性,无论父类属性访问权限是否开放,只要知道是否需要使用父类的属性即可,也提供定制化配置,所以不用过多担心
优点:
1)使用注解即可帮忙自动生成代码
2)大大减少了代码量,使代码非常简洁
3)部分注解在业务项目中开发能大大提高效率
项目中应该用还是不用呢
1)不建议开发中间件的项目使用,中间件设计的要求是解耦少依赖
2)业务项目实体类可以用,且用的时候知道对应的常见的注解原理
Lombok
@Setter/@Getter
@NonNull
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
@ToString
@EqualsAndHashCode
@Data
@Builder
@Log
@Slf4j