【SpringBoot新手篇】SpringBoot集成Lombok
SpringBoot集成LombokLombok是什么?Lombok是什么?它是一个能帮我们消除那些必须要写但是重复的代码,比如setter,getter,构造函数之类的方法。idea安装lombok:在idea的settings(windows)或者Preferences(mac),下找到plugins菜单,点击Browse repositories,如图然后搜索lombok,点击右侧下载,下载
【SpringBoot新手篇】SpringBoot集成Lombok
Lombok是什么?
它是一个能帮我们消除那些必须要写但是重复的代码,比如setter,getter
,构造函数之类的方法。
idea
安装lombok
:
在idea
的settings(windows)
或者Preferences(mac)
,下找到plugins
菜单,点击Browse repositories
,如图
然后搜索lombok
,点击右侧下载,下载完成重启即可,如图
新建项目,在pom文件中加入lombok依赖,完整pom如下:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
新建一个User
类,这个是使用lombok
的类,代码如下:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String name;
private String password;
}
编译的Class文件
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.SOURCE)
public @interface Data {
String staticConstructor() default "";
}
@Data 注解@Retention(RetentionPolicy.SOURCE)
只会在源文件中有效(即源文件保留)
lombok常用注解
1、@Data
注解 : 一般用在类上,提供类所有属性的 get 和 set 方法,此外还提供了equals、canEqual、hashCode、toString等方法;
2 、@Setter
注解:一般用在属性上,为属性提供 set 方法, 用在再类上则表示当前类中所有属性都生成set方法;
3、@Getter
注解:用在属性上,为属性提供 get 方法, 用在再类上表示当前类中所有属性都生成get方法;
4、@Log4j or @Slf4j
注解 :用在类上,为类提供一个 属性名为log 的 log4j日志对象;
5、@NoArgsConstructor
注解:用在类上,为类提供一个无参的构造方法;
6、@AllArgsConstructor
注解:用在类上,为类提供一个全参的构造方法;
7、@RequiredArgsConstructor
注解: 用在类上,生成一个包含 “特定参数” 的构造器,特定参数指的是那些有加上 final 修饰词的变量们;
8、@Builder
注解: 用在类上,自动生成流式 set 值写法,从此之后再也不用写一堆 setter 了;
@RequiredArgsConstructor和final代替@Autowired
在Spring4.x中增加了新的特性:
如果类中只提供了一个带参数的构造方法,则不需要对对其内部的属性写@Autowired注解,Spring会自动为你注入属性;
Spring依赖注入的方式
- @Autowired属性注入
- 构造器注入
- setter注入
1、@Autowired属性注入
@Aspect
@Component
@Slf4j
public class LogAspect {
@Autowired
HttpServletRequest request;
@Autowired
OperateLogMapper operateLogMapper;
}
2、构造器注入
Spring4.3+之后,constructor注入支持非显示注入方式。不需要在带参数的构造方法写
@Autowired
注解
@Aspect
@Component
public class LogAspect {
private final Logger Logger = LoggerFactory.getLogger(LogAspect.class);
// @Autowired
HttpServletRequest request;
// @Autowired
private OperateLogMapper operateLogMapper;
public LogAspect(HttpServletRequest request, OperateLogMapper operateLogMapper) {
this.request = request;
this.operateLogMapper = operateLogMapper;
}
}
idea已经识别注入图标了
3、setter注入
@Aspect
@Component
public class LogAspect {
private final Logger Logger = LoggerFactory.getLogger(LogAspect.class);
HttpServletRequest request;
private OperateLogMapper operateLogMapper;
@Autowired
public void setRequest(HttpServletRequest request) {
this.request = request;
}
@Autowired
public void setOperateLogMapper(OperateLogMapper operateLogMapper) {
this.operateLogMapper = operateLogMapper;
}
}
@RequiredArgsConstructor: 用在类上,生成一个包含 “特定参数” 的构造器,特定参数指的是那些有加上 final 修饰词的变量们;
使用: 当我们需要注入Bean的时候可以直接在类名称上使用@RequiredArgsConstructor
,需要注入的属性对象必须声明为final修饰。就可以代替Autowrited注解
@Aspect
@Component
@Slf4j
@RequiredArgsConstructor
public class LogAspect {
final HttpServletRequest request;
final OperateLogMapper operateLogMapper;
}
Lombok @Data注解开发遇到的问题
不标准驼峰导致参数获取不到
Ctroller层接收Person对象参数,无法注入uName、pId的值。即属性值为空,定位原因是使用@Data生成get/set方法不正确
1、实体类
public class Person {
private String uName;
private Integer pId;
}
2、正常的idea生成get/set方法。如下:
public class Person {
private String uName;
private Integer pId;
public String getuName() {
return uName;
}
public void setuName(String uName) {
this.uName = uName;
}
public Integer getpId() {
return pId;
}
public void setpId(Integer pId) {
this.pId = pId;
}
}
3、使用Lombok @Data注解生成get/set方法
@Data
public class Person {
private String uName;
private Integer pId;
}
4、查看编译后的class文件,@Data注解生成get/set方法
is属性出现的问题
布尔类型的isDelete属性,使用@Data生成get/set方法都会出现问题
@Data
public class User {
private String id;
private String isEnable;
private boolean isDelete;
}
@Data生成的get/set方法
1、boolean类型的isXXX属性,使用@Data生成get方法错误,方法没有以get开头
2、boolean类型的isXXX属性,使用@Data生成set方法错误,方法去掉了属性的is
更多推荐
所有评论(0)