springboot集成lombok

在传统方法中,我们对一个实体类定义了属性之后,会手动生成set,get方法。使用lombok插件可以简化繁琐的代码。但是在大型项目中性能不太好,因为它要去字节码文件中进行修改,所以在一个大项目中修改代码工作量比较大。

原理:在编译的时候修改字节码文件,底层使用字节码技术,帮我们在内存中修改字节码文件,生成get,set方法。

使用lombok,需要先使eclipse支持该插件,先要下载jar(Download),下载完成后双击jar,选择本机上的eclipse,点击Install,重启eclipse。

然后在springboot中集成lombok插件,在pom文件中添加依赖:

<!-- springboot 集成lombok插件 -->
<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>

编写实体类:

package wyh.entity;

import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;

@Slf4j//使用日志,等同于private static final Logger logger = LoggerFactory.getLogger(JspController.class);
public class User {

	//在每一个属性上面都加上set,get注解,在后面使用对象的时候就可以直接调用对象的set,get方法
	@Getter
	@Setter
	private String name;
	
	@Getter
	@Setter
	private Integer age;
	
	
	public static void main(String[] args) {
		User user = new User();
		user.setAge(11);
		user.setName("wyh");
		log.info(user.toString());
	}
	
	@Override
	public String toString() {
		return "userName:"+name+"age:"+age;
	}

}

我们可以发现在使用了lombok插件后,不需要手动生成set,get方法就可以在使用对象时直接调用set,get方法。

运行该实体类中的main方法,查看打印结果,使用@Slf4j就可以打印出日志:

那么问题来了,如果一个实体类中有很多属性,岂不是要写很多个@Setter,@Getter注解吗?

这样就有了更进一步的使用,我们可以在类上面添加@Setter,@Getter,这样整个类中的属性都可以自动有了set,get方法。

当然,lombok还有很多注解可以帮助我们简化代码:

@ToString:自动生成toString().

@Data:相当于set+get+tostring@RequiredArgsConstrutor+@RequiredArgsConstrutor

下面我们来验证一下lombok到底帮我们做了什么:

在项目中target---->

找到class文件:

将该class文件拖入反编译工具中我们可以发现它其实就是帮我们生成了和我们之前手动编写set,get方法一样的代码:

现在我们可以对比一下两份代码:

源文件:

package wyh.entity;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

@Slf4j//使用日志,等同于private static final Logger logger = LoggerFactory.getLogger(JspController.class);
/*@Getter
@Setter
@ToString*/
@Data
public class User {

	//在每一个属性上面都加上set,get注解,在后面使用对象的时候就可以直接调用对象的set,get方法

	private String name;

	private Integer age;
	
	
	public static void main(String[] args) {
		User user = new User();
		user.setAge(11);
		user.setName("wyh");
		log.info(user.toString());
	}
	
	/*@Override
	public String toString() {
		return "userName:"+name+"age:"+age;
	}
*/
}

反编译:

// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   User.java

package wyh.entity;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class User
{

	private static final Logger log = LoggerFactory.getLogger(wyh/entity/User);
	private String name;
	private Integer age;

	public static void main(String args[])
	{
		User user = new User();
		user.setAge(Integer.valueOf(11));
		user.setName("wyh");
		log.info(user.toString());
	}

	public String getName()
	{
		return name;
	}

	public Integer getAge()
	{
		return age;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public void setAge(Integer age)
	{
		this.age = age;
	}

	public boolean equals(Object o)
	{
		if (o == this)
			return true;
		if (!(o instanceof User))
			return false;
		User other = (User)o;
		if (!other.canEqual(this))
			return false;
		Object this$name = getName();
		Object other$name = other.getName();
		if (this$name != null ? !this$name.equals(other$name) : other$name != null)
			return false;
		Object this$age = getAge();
		Object other$age = other.getAge();
		return this$age != null ? this$age.equals(other$age) : other$age == null;
	}

	protected boolean canEqual(Object other)
	{
		return other instanceof User;
	}

	public int hashCode()
	{
		int PRIME = 59;
		int result = 1;
		Object $name = getName();
		result = result * 59 + ($name != null ? $name.hashCode() : 43);
		Object $age = getAge();
		result = result * 59 + ($age != null ? $age.hashCode() : 43);
		return result;
	}

	public String toString()
	{
		return (new StringBuilder("User(name=")).append(getName()).append(", age=").append(getAge()).append(")").toString();
	}

	public User()
	{
	}

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QYHuiiQ

听说打赏的人工资翻倍~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值