欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java中lambda表达式实现aop切面功能

程序员文章站 2022-12-20 09:13:52
背景:最近项目中涉及到自定义线程池中子线程获取父线程的traceid,这个数据的传递过程可以用lamdba表达式进行封装实现的。这让我想到spring容器的三级缓存。其中的一个缓存singletonf...

背景:最近项目中涉及到自定义线程池中子线程获取父线程的traceid,这个数据的传递过程可以用lamdba表达式进行封装实现的。这让我想到spring容器的三级缓存。其中的一个缓存singletonfactories就是存放的lambda表达式的。

一些业务逻辑可以通过lambda表达式进行封装,就可以当作一个参数一样进行传递,然后在需要的时候进行执行。但是它的强大并不止于此,还可以当作aop切面进行使用。通过一个demo进行展示

lambda表达式实现切面功能

定义一个函数式接口

创建两个实现类

客户端

执行结果

Java中lambda表达式实现aop切面功能

 执行结果如下,可以看到经过wrap方法封装后的demointerface接口对象,执行过程都会走lamdba中的代码。给人一种aop的感觉

缺点

经过wrap方法返回的对象都是demointerface类型的,它是接口类型,如果在某种特定的情况下能够确定它是由某个子类类型实力化得到的,想要强转回去,然后获取子类独有的属性,这种情况下会报错。

Java中lambda表达式实现aop切面功能

错误结果显示如下:

exception in thread "main" java.lang.classcastexception: class functioninterface.demomain$$lambda$14/0x0000000800066840 cannot be cast to class functioninterface.demosonone (functioninterface.demomain$$lambda$14/0x0000000800066840 and functioninterface.demosonone are in unnamed module of loader 'app')
    at functioninterface.demomain.main(demomain.java:26)

由此可见该方法进行封装有好处,也有坏处,所以要谨慎使用。 

到此这篇关于java中lambda表达式实现aop切面功能的文章就介绍到这了,更多相关lambda表达式实现aop切面内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!