SpringBoot之Assert(断言)

最近在阅读SpringBoot的源码,发现SpringBoot有一个很有意思的类—Assert(断言),特此纪录一下。


一、问题重现

新人菜鸡们(比如我),都会下意识的使用if这种判断句来判断某些条件是否成立,然后再进行处理(比如抛出异常啥的)。
例如:

public void main(int x){
	.....
	if( x < 0 ){
		throw new RuntimeException("传入的数据不能小于0");
	}
	.....
}

程序的编写中不可避免的会出现此类代码,这是很正常的事情。但是一旦代码规模大起来,这种if判断会显得特别繁杂。同时,各位帅哥美女们仔细观察(很细啊!)就能发现很多if的逻辑都是大同小异的。那么怎样做才能更优雅更快(更多时间摸鱼)的写这种代码呢?


二、SpringBoot中的Assert

其实巨佬们都将答案写在源码上了(=,=)。这时候我们就能看一下SpringBoot的源码~

1.先引入概念

  • 什么是Assert:

    assert是Java的一个保留字,从JAVA SE 1.4 引入的,表示断言。

  • SpringBoot中的Assert

    SpringBoot引入了Assert机制,在org.springframework.util.Assert类中,基本上替代传统的if判断然后抛出异常的业务代码,使代码变得简洁,提高程序可读性。


2.细看大佬的操作

以SpringBoot2.3.4.RELEASE版本为例

//	org.springframework.boot.autoconfigure.AutoConfigurationImportSelector.class
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
  List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
  Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
  return configurations;
}

这个方法中包含了这么一句Assert.notEmpty(xxx,"xxxxx")。没怎么了解过Assert的各位吴彦祖或者刘亦菲们就会发出疑问:介系个嘛呀?点进去康康,看看能不能找到点 鸡脚 什么的。
鸡脚 如下:

// org.springframework.util.Assert.class
public abstract class Assert {
    public Assert() {}
    ...
    public static void notEmpty(@Nullable Collection<?> collection, String message) {
	    if (CollectionUtils.isEmpty(collection)) {
	        throw new IllegalArgumentException(message);
	    }
	}
     ...
}

看到这里,大家懂的都懂,其实Assert就是一个工具类,将一些常用的判断提取出来封装成一个工具类,看看行不行,不行就抛个异常什么的。很强啊!平平无奇的一个小操作,使代码变得简洁,提高程序可读性。


三、化为己用

俗话说的好,学而不思则罔。我们要怎么做才能将我们的代码变得更简洁呢?

  • 直接调用断言函数
    我们在写的时候可以先看看Assert有没有写类似的代码,有的话直接调用就好了(舒服~)
  • 继承Assert类实现更多功能
    我们可以继承Assert类,扩展属于我们的方法,同时配合SpringBoot全局异常处理@ExceptionHandler(SQLException.class),将异常抛出、异常处理全部从业务代码中剔除出来(美汁汁~)
    例子:还没写好,未完待续…

四、总结

Assert就是封装了一些常用判断的工具类,我们可以灵活使用它让我们的代码变得更加漂亮优雅。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值