什么叫函数式接口?
有且仅有一个抽象方法的接口(不包括默认方法、静态方法以及对Object方法的重写)
函数式接口不同于以往的普通接口,它最大的作用其实是为了支持行为参数传递,比如传递Lambda、方法引用、函数式接口对应的实例对象等。
大概讲一下函数式接口方法传递的使用方法
背景:我们执行业务数据更新的时候需要对相关业务ID进行数据库加锁,不然会在同一个时刻由不同的用户对同一条数据进行Update操作;加锁的组件是在update之前进行加锁,在进行数据库操作方法save,最后再解锁,为了写成公共的逻辑,采用函数式接口把save方法传到加锁组件里面,因为对应各种业务场景save的操作有不一样的;
定义函数式接口入参变量
加锁并执行方法
加锁方法调用
doBusiLock方法参数有三个:
Action action:加锁过程中需要执行的方法体;
String lockId:锁粒度,一般是业务编号;
String lockType:锁类型,是哪一种业务类型,有可能同一个业务编号存在多种类型操作;
重点说一下Action action,外面调用传参是一个方法save(busiIno),进入方法体后action.doAction()其实执行的就是save(busiIno),俗话说就是被替换了;