java filter 回调_搞不懂java的回调机制?用debug帮您深度揭开她的神秘面纱

回调机制,一般用于上下层次之间的协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调,例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行回调,将这个数据交给上层应用层来做进一步处理,这在分层的数据通信中很普遍。

44:09

上面的解释估计,读起来,很拗口,不明白,简明一句话:上级类通过电话(接口)通知下级类去完成工作,下级类通过电话(接口),告诉上级类,我已经完成了!

回调函数在Filter中的使用

Filter是基于java回调机制的,可以把FilterChain看成是上级类,而request() 和 response() 是上级类(FilterChain)要程序猿自己写处理类,进行处理实现。

17e052218c61a3653d0a889bdaeaf87e.pngFilter是基于java回调机制的

4a1892c56bfeaa37f4e8c7d48d601fcb.png回调函数在Filter中的使用

回调函数在多线程中的使用

采用Callback 异步回调技术若是需要回调一个被传递且要执行完该方法,那就需要采用Callback 异步回调技术

42682f18a40d4e0b7b654b2448fab064.pngCallback 异步回调技术

从代码的DEBUG的调用中,可以看到,NettyTest1的main方法,执行完后,调用了doStm()方法,并开启一个新的子线程,引用 ICallback接口,达到了异步调用的目的!

94ba0b33997111422f913ce4665a6fda.png

采用Futures同步回调技术若需要同步等待线程处理结果可以Futures ,Futures是一个抽象的概念,它表示一个值,该值可能在某一点变得可用。一个Future要么获得计算完的结果,要么获得计算失败后的异常。

dbe6eb28f7ee7d72137aa47db5face28.pngFutures同步回调技术

Future接口在java.util.concurrent包中,使用Executor异步执行。如下面的代码,每传递一个Runnable对象到ExecutorService.submit()方法,就会得到一个回调的Future,你能使用它检测是否执行,这种方法可以是同步等待线处理结果 。

3c016a1b5f083aad9dc4afb26aeca6fb.png

回调函数在jdk8的lambda表达式的使用

lambda表达式,经常出现在嵌套环境中,比如说作为方法的参数。为了使lambda表达式在这些场景下尽可能简洁,我们去除了不必要的分隔符。

如下lambda表达式:

e51cc39a881033c2e16004285163c280.png

lambda表达式的语法由参数列表、箭头->(等价于return)和函数体组成。

ecc6add8c14472f95c7d1d384a640be0.png回调函数在jdk8的lambda

回调函数在jdk8的lambda表达式的使用,从代码层面,节省了代码行数,同时结合回调机制的匿名类型的特点,巧妙地嵌入了callback的回调机制。

无论回调机制如何变化,实质是一种双向的调用模式,被调用的接口被调用时也会调用对方的接口,例如A要调用B,B在执行完又要调用A。

a67ba3b4a8168cad4c1a03de69e4ff6f.pngdebug帮您深度揭开回调机制

基本上,都是面向接口,采用接口反射回调技术,实现了调用方与被调用方的松耦合,比如可以有多种实现方案,根据一定的业务规则找到一种方案,用接口反射回调来实现,就只需要保证程序在运行期能关联到被引用的类。

经过数天的思考,酝酿,积累,终于完成此篇文章,受限于笔者自身水平,文章可能含有技术性或描述上的错误。欢迎在下方指出问题、提出问题,流学习。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值