开发神器-神奇插件Lombok让饱受臃肿之说骚扰的java美眉得到了新生

开发神器-神奇插件Lombok让臃肿的java美眉得到新生

本文环境:java8 eclipse maven3.5 Springboot 2.0.1

Lombok是什么

lombok是一个神奇的开发插件,他能够通过简单的注解,来把代码中的重复大量的样板代码进行一个简单的替换,如set/get方法以及equals和hashCode实现等~。

Lombok的安装

两步进行插件的安装

1. Eclipse插件安装【idea安装只需要在插件市场里搜索lombox plugin 安装即可】
  1. jar包下载
  • 官方下载,找到lombok版本中选择1.16.20进行下载,拷贝进项目中[本文采用maven导入,与拷贝区别不大]
  • 下载地址:lombok all-versions
  1. 打开jar包
  • 双击打开即可。
  • 如果不可以打开就使用命令行打开 [java -jar lombok.jar]
  1. 打开之后安装
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DzCkCJ4J-1583563417326)(http://www.hdpz.xyz/upload/2020/2/image-45eb3bcd0da3483291477b6ed4ab6363.png)]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j3A3rolo-1583563417326)(http://www.hdpz.xyz/upload/2020/2/image-d1dda9c3626a4b29958e8ca05ae48fef.png)]
  2. 检查一下Eclipse是否安装成功
2. jar包引入
本文采用lombok 1.16.20版本

maven导入,拷贝进pom文件

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.20</version>
</dependency>

Lombok怎么用 (常用注解)

Lombok以注释的方式使用,只需要在需要生成通用方法的地方加上对应的注释,即可快速的实现开发
@getter和@Setter

这两个注解分别生成Getter与Setter方法

//在属性上注解
public class UserGetterSetter {
//	在属性上注解,这样就会对应的生成get/set方法
	@Getter @Setter 
	private String name;
	@Getter @Setter 
	private Integer age;
}

//在类上注解,这样所有属性都会生成get/set方法
@Getter @Setter 
public class UserGetterSetter {
	private String name;
	private Integer age;
}

@NonNull

这个注解会快速的检查当前值是否为空,如果为空则抛NullPointerException异常

public class UserNonNull {
//	用了@NonNull这个注解,在构造set等方法中都会进行非空判断
	@Getter @Setter @NonNull
	private String name;
}
@ToString

这个注解生成toString方法,如果需要排除输出属性可在内

//		callSuper 是否输出超类属性方法,exclude排除某属性
@ToString(callSuper=true,exclude="interest")
public class UserToString extends UserGetterSetter{
	private String sex="男";
	private String interest="女";
}
@EqualsAndHashCode

这个注解生成equals和hashCode方法

//		与ToString注解用法基本相似
//		callSuper 生成时是否包含超类,exclude排除某属性
@EqualsAndHashCode(callSuper=true,exclude= {"interest","money"})
public class UserEqualsAndHashCode extends UserGetterSetter{
	private String sex="男";
	private String interest="女";
	private Double money=100.0;
}
@Data(非常常用)

这个注解最常用,它结合了功能成@ToString, @EqualsAndHashCode, @Getter和@Setter

//@Data
//@Data设置staticConstructor属性可以生成静态工厂方法,生成参数指定名称的静态工厂方法
@Data(staticConstructor="getUserData")
public class UserData{
	private String name;
	private Integer age;
	private String sex="男";
	private String interest="女";
	private Double money=100.0;
}
@Cleanup
  • @Cleanup注解,确保分配资源被释放。
  • 使用时要考了清理会不会引发异常,如果引发了,由于使用了@Cleanup注解问题会被埋藏起来,看日志报错很难找到根源。
public class CleanupTest {
	
//	实现资源释放
//	加注解
	public void testCleanUpLombox() {
	    try {
	        @Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream();
	        baos.write(new byte[] {'Y','e','s'});
	        System.out.println(baos.toString());
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
	}
//	原始方式
	public void testCleanUp() {
	    try {
	        ByteArrayOutputStream baos = new ByteArrayOutputStream();
	        try {
	            baos.write(new byte[]{'Y', 'e', 's'});
	            System.out.println(baos.toString());
	        } finally {
	            baos.close();
	        }
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
	}
}
@synchronized

这个注解作用是快速生成线程同步的模版。在方法上使用整个方法线程安全。也可以在对象上使用,会造成死锁。不建议在变量上使用。

public class SynchronizedTest{
	// 使用注解
	@Synchronized
	public void synchronizedTestLombox() {
		System.out.println("----1-----");
		System.out.println("----2-----");
		System.out.println("----3-----");
		System.out.println("----木-----");
		System.out.println("----头-----");
		System.out.println("----人-----");
	}
	// 不使用注解	
	private final java.lang.Object $lock = new java.lang.Object[0];
	public void synchronizedTest() {
		synchronized ($lock) {
			System.out.println("----1-----");
			System.out.println("----2-----");
			System.out.println("----3-----");
			System.out.println("----木-----");
			System.out.println("----头-----");
			System.out.println("----人-----");
	    }
	}
}

@Slf4j (非常常用)

快速生成日志模版, 最好用的注解之一,与@Data并驾齐驱
只需要在类的开头加上注解,就ok了,记得加上日志依赖,本文使用的是SpringBoot默认日志框架logback

@Slf4j
public class Slf4jTest {

	public void testSlf4j() {
		log.debug("这是debug");
		log.info("这是Info");
		log.error("这是error");
		
		Integer errorCode = 11;
		log.error("这是error 错误代号={}", errorCode);// 传入值为object,打印时中括号会背代替掉
	}
}
@Accessors(chain = true)

链式编程注解,该注解打在bean上。

@Data
@Accessors(chain = true)
public class AccessorsTest {

    private String name;
    private int age;

    public static void main(String[] args) {
        AccessorsTest accessorsTest = new AccessorsTest().setName("黄大胖子").setAge(99);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值