六,Spring Boot 容器中 Lombok 插件的详细利用,简化设置,提高开发服从 ...

打印 上一主题 下一主题

主题 548|帖子 548|积分 1644

六,Spring Boot 容器中 Lombok 插件的详细利用,简化设置,提高开发服从

@
目录

1. Lombok 先容

Lombok 作用:

  • 简化 Java Bean开发,可以利用 Lombok 的注解让代码更加简洁。
  • Java项目中,很多没有技术含量但又必须存在的代码;好比:Pojo 的 getter/setter/toString ;异常处置惩罚:I/O流的关闭操作等等。
  • Java项目中,很多没有技术含量但又必须存在的代码:好比:这些代码既没有技术含量,又影响着代码的美观,Lombok 应运而生。
Spring Boot 和 IDEA 官方支持

  • IDEA 2020已经内置了 Lombok插件
  • Spring Boot 2.1.x之后的版本也在 Stater中内置了 Lombok 依赖
2. Lombok 常用注解
  1. @Data:注解在类上,提供类所有属性的getting和setting方法,此外还提供了equals,canEqual,hashCode,toString方法
  2. @Setter: 注解在属性上,为属性提供 setting 方法,注解在类上,则为类中的所有属性提供 set()方法。
  3. @Getter: 注解在属性上,为属性提供 getting 方法注解在类上,则为类中的所有属性提供 get()方法。
  4. @Log4j:注解在类上:为类提供了一个属性名为: log 的 log4j的日志对象
  5. @NoArgsConstructor: 注解在类上,为类提供一个无参的构造方法,(一定会提供)
  6. @AllArgsConstructor: 注解在类上,为类提供一个全参的构造方法
  7. @Cleanup: 可以关闭流
  8. @Builder: 被注解的类加个构造者模式
  9. @Synchronized: 加同步锁
  10. @SneakyThrows: 等同于try/catcher捕获异常
  11. @NonNull:如果给参数加个这个注解,参数为null会抛出空指针异常
  12. @Value: 注解和@Value类似,区别在于它会把所有成员变量默认定义为 private final 修饰,并且不会生产set()方法
复制代码
下面我们测试,利用几个,在开发中比较常用的注解
首先想要利用上 Lombok 必要导入相关 jar 依赖,也可以不用特别导入,直接利用 Spring Boot 自带内置的即可。
  1.    
  2.         <dependency>
  3.             <groupId>org.projectlombok</groupId>
  4.             <artifactId>lombok</artifactId>
  5.         </dependency>
复制代码
  1.     4.0.0    com.rainbowsea    springboot_lombok    1.0-SNAPSHOT                org.springframework.boot        spring-boot-starter-parent        2.5.3                                            org.springframework.boot            spring-boot-starter-web               
  2.         <dependency>
  3.             <groupId>org.projectlombok</groupId>
  4.             <artifactId>lombok</artifactId>
  5.         </dependency>   
复制代码
2.1 @ToString

@ToString:  // 在编译时,天生 toString,注意:默认情况下,会天生一个无参构造器。
  1. package com.rainbowsea.springboot.bean;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.Getter;
  5. import lombok.NoArgsConstructor;
  6. import lombok.Setter;
  7. import lombok.ToString;
  8. @ToString  // 在编译时,生成 toString,注意:默认情况下,会生成一个无参构造器
  9. public class Furn {
  10.     private Integer id = 100;
  11.     private String name = "张三";
  12.     private Double price = 999.0;
  13. }
复制代码
利用 lombok 注解简化代码,可以通过 idea 自带的反编译功能 target,看Furn.class的源码,就
可以看到天生的完整代码。
如果目录当中没有 target 目录表现,可以进行如下操作:


2.2 @Setter

@Setter 注解: 注解在属性上,为属性提供 setting 方法,注解在类上,则为类中的所有属性提供 set()方法。
首先,我们先注解利用在属性上。
  1. package com.rainbowsea.springboot.bean;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.Getter;
  5. import lombok.NoArgsConstructor;
  6. import lombok.Setter;
  7. import lombok.ToString;
  8. public class Furn {
  9.     @Setter // 注解在属性上,编译生成一个,该属性的 set()方法:默认情况下,会生成一个无参构造器
  10.     private Integer id = 100;
  11.     private String name = "张三";
  12.     private Double price = 999.0;
  13. }
复制代码

添加到类上,为类中所有的属性都添加,set() 方法。


2.3 @Data

@Data :注解在类上,提供类所有属性的getting和setting方法,别的还提供 equals,canEqual,hashCode,toString方法, @RequiredArgsConstructor
特别说明: @Data 中的 @RequiredArgsConstructor
在我们写controller 或是 Service层的时候,必要注入很多的 mapper接口或者另外的service接口,这时候就会写很多
的@Autowired注解,代码看起来很乱。Lombok 提供了一个注解:
@RequiredArgsConstructor(onConstructor=@_(@AutoWired))
写在类上可以取代@Autowired注解,必要注意的时在注入时,必要用final界说,或者利用 @notnull注解
  1. package com.rainbowsea.springboot.bean;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.Getter;
  5. import lombok.NoArgsConstructor;
  6. import lombok.Setter;
  7. import lombok.ToString;
  8. @Data// 注解等价使用了,如下注解: @Getter,@Setter,@RequiredArgsConstructor @ToString,@EqualsAndHas
  9. public class Furn {
  10.     private Integer id = 100;
  11.     private String name = "张三";
  12.     private Double price = 999.0;
  13. }
复制代码

2.4 @AllArgsConstructor

@AllArgsConstructor:在编译时,会天生全参数构造器
  1. package com.rainbowsea.springboot.bean;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.Getter;
  5. import lombok.NoArgsConstructor;
  6. import lombok.Setter;
  7. import lombok.ToString;
  8. @AllArgsConstructor // 在编译时,会生成全参数构造器
  9. public class Furn {
  10.     private Integer id = 100;
  11.     private String name = "张三";
  12.     private Double price = 999.0;
  13. }
复制代码

注意:这里:我们会发现一点,就是有全参数构造器,但是,却没有天生一个默认的“无参数构造器”
2.5 @NoArgsConstructor

@NoArgsConstructor: 在编译时,会天生无参构造器(一定会天生),不会受到其它的
  1. package com.rainbowsea.springboot.bean;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.Getter;
  5. import lombok.NoArgsConstructor;
  6. import lombok.Setter;
  7. import lombok.ToString;
  8. @NoArgsConstructor //在编译时,会生成无参构造器(一定会生成),不会受到其它的
  9. public class Furn {
  10.     private Integer id = 100;
  11.     private String name = "张三";
  12.     private Double price = 999.0;
  13. }
复制代码

特别说明:
特别说明,固然上面的@Data,@ToString注解等等,默认情况下都会天生一个无参构造器,但是当你利用了多个注解的时候,可能会覆盖掉无参构造器。 但是当我们有其它多个构造器天生时,你如果你希望仍然有无参构造器就必要利用 @NoArgsConstructor 注解了,由于 @NoArgsConstructor是一定会天生一个无参构造器的(无参构造器很重要,由于框架的利用是涉及到反射机制的,而反射机制,必要一个无参构造器,否则你就无法进行反射获取 bean对象,框架也就无法利用了)。
如下:测试。我们添加上 @Data注解和 @AllArgsConstructor 注解。可以明显的发现,默认的无参数构造器被覆盖掉了

所以我们必要添加上:@NoArgsConstructor注解,由于@NoArgsConstructor注解,在编译时,会天生无参构造器(一定会天生),不会受到其它的影响,被覆盖。如图

3. 在 idea 中 安装 lombok插件

不装插件也可以用基本的注解好比:@Data,@Getter...
但是不能利用其扩展功能,好比日志输出...,所以我们还是安装一下,也比较简朴。
直接去插件商城,搜索: Lombok 即可

  1. package com.rainbowsea.springboot.controller;
  2. import com.rainbowsea.springboot.bean.Furn;
  3. import lombok.extern.slf4j.Slf4j;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. @Slf4j
  8. @RestController  // @Controller + @ResponseBody
  9. public class HiController {
  10.     @Autowired
  11.     private Furn furn;
  12.     @RequestMapping("/hi") // 设置请求映射路径
  13.     public String hi(){
  14.         log.info("furn-"+furn);
  15.         // 占位符方式输出
  16.         log.info("furn={} myfurn={}",furn,furn);
  17.         return  "hi word";
  18.         // 使用 slf4j日志输出
  19.     }
  20. }
复制代码
运行测试:

4. 总结:


  • 熟悉常用的 Lombok 注解,提供开发服从。
  • 基本上@注解都会天生一个默认的无参构造器,但是当存在多个注解的时候,这个默认的无参构造器,可能会被覆盖掉,从而导致无法不会被天生。但是,框架的上的利用,基本上都是必要利用上反射 机制的,而反射机制是必须要有一个无参构造器 才可以进行反射,获取到对应的 Bean对象。给框架利用。所以,一般的 bean 对象都会添加上一个@NoArgsConstructor注解该在编译时,会天生无参构造器(一定会天生),不会受到其它的
6. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和复兴是我创作的动力源泉,我从你们身上罗致了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

嚴華

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表