目录
1.lombok的引入
2.@Slf4j注解:简化日志代码
3.@Getter, @Setter, @Data 注解:简化实体类代码
4.lombok的其他注解
springboot集成lombok
lombok是spring提供的一个组件,并不是springboot特有的,里面提供了很多注解,可以简化我们的代码.
我们今天主要演示lombok简化日志代码的@Slf4j注解,和简化实体的set/get方法的@Data注解
1.lombok的引入
我们在springboot项目中演示
1.添加依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
2.idea使用lombok需要安装lombok插件,否则无法使用lombok的注解
安装链接:
此链接里还介绍了一些lombok中的注解的使用,可以了解一下。
2.@Slf4j注解:简化日志代码
上一篇文章里,讲的使用AOP统一处理web请求日志的代码中,引用了log4j依赖,每一个类中如果需要单独打印日志,还需要获取Logger对象才可以打印日志:
private static final Logger logger = LoggerFactory.getLogger(XXXXXX.class);
每一个类中都需要添加这么一行代码才可以添加日志,这样也太复杂了,于是lombok提供了@Slf4j注解,可以直接使用logger对象,而不用再获取此对象了,简化了代码。
1.创建一个LombokController类
package com.itmayiedu.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class LombokController {
@RequestMapping("/printLog")
public String printLog(String name,Integer age) {
log.info("打印日志:name = " + name + ",age = " + age);
return "我的第一个springboot项目";
}
}
2.浏览器访问
3.控制台打印日志
3.@Getter, @Setter, @Data 注解:简化实体类代码
1.我们平时写一个实体类,定义属性之后,还要写对应的get/set方法
创建一个entity包下的UserEntity实体类
package com.itmayiedu.entity;
public class UserEntity {
// 定义属性
private String name;
private Integer age;
// get/set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
2.在LombokController类中新增一个getUser方法,里面调用了实体类的get/set方法
package com.itmayiedu.controller;
import com.itmayiedu.entity.UserEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class LombokController {
@RequestMapping("/getUser")
public String getUser(String name,Integer age) {
UserEntity userEntity = new UserEntity();
userEntity.setName(name);
userEntity.setAge(age);
log.info("打印日志:" + userEntity.toString());
return "SUCCESS";
}
}
3.这种是我们常用的实体类,需要定义get/set方法,lombok提供了@Getter,@Setter注解,这样就可以替代掉代码中的get/set方法,LombokController类中依然可以调用实体类的get/set方法。
注:我们编译之后的class文件,依然是get/set方法,注解只是简化我们的代码,底层实际上没有改变。
package com.itmayiedu.entity;
import lombok.Getter;
import lombok.Setter;
public class UserEntity {
// 定义属性
@Getter
@Setter
private String name;
@Getter
@Setter
private Integer age;
}
定义在类上也可以
package com.itmayiedu.entity;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class UserEntity {
// 定义属性
private String name;
private Integer age;
}
4.@Data注解不但可以定义get/set方法,还有toString等方法
package com.itmayiedu.entity;
import lombok.Data;
@Data
public class UserEntity {
// 定义属性
private String name;
private Integer age;
}
5.浏览器访问getUser接口
6.控制台日志打印
7.所以,我们最终简化实体类代码,使用@Data注解即可,不用使用@Getter,@Setter注解了
4.lombok的其他注解:
- @Data : 自动生成set/get方法,toString方法,equals方法,hashCode方法,不带参数的构造方法
- @NotNull : 让你不在担忧并且爱上NullPointerException
- @CleanUp : 自动资源管理:不用再在finally中添加资源的close方法
- @Setter/@Getter : 自动生成set和get方法
- @ToString : 自动生成toString方法
- @EqualsAndHashcode : 从对象的字段中生成hashCode和equals的实现
- @NoArgsConstructor/@RequiredArgsConstructor/@AllArgsConstructor 自动生成构造方法
- @Value : 用于注解final类
- @Builder : 产生复杂的构建器api类
- @SneakyThrows : 异常处理(谨慎使用)
- @Synchronized : 同步方法安全的转化
- @Getter(lazy=true) :
- @Log : 支持各种logger对象,使用时用对应的注解,如:@Log4