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

java在线学习-SpringAop中pointcut的原理以及如何手动实现

程序员文章站 2022-03-26 10:30:49
鲁班学院 SpringAop中pointcut的原理以及如何手动实现在Spring中使用过AOP的人必须对切入点表达式有更好的了解。在Spring中,用户使用切入点表达式来定义我们的增强功能所应用于的方法类型。这个入口点表达非常重要。对于我们的手写AOP,我们还需要提供这样的功能。当然,表达式是由用户编写的,我们的框架会解析用户的表达式,然后对应于特定的方法。如何解析用户定义的表达式?如上所述,一个或多个不同的目标由一串字符匹配。我们的第一个反应必须是正则表达式。显然,可以通过使用正则表达式来实现此...

鲁班学院 SpringAop中pointcut的原理以及如何手动实现

在Spring中使用过AOP的人必须对切入点表达式有更好的了解。在Spring中,用户使用切入点表达式来定义我们的增强功能所应用于的方法类型。这个入口点表达非常重要。

对于我们的手写AOP,我们还需要提供这样的功能。当然,表达式是由用户编写的,我们的框架会解析用户的表达式,然后对应于特定的方法。
java在线学习-SpringAop中pointcut的原理以及如何手动实现
如何解析用户定义的表达式?如上所述,一个或多个不同的目标由一串字符匹配。我们的第一个反应必须是正则表达式。显然,可以通过使用正则表达式来实现此功能。

但实际上这样的表达式还有很多。比如AspectJ,Antpath等。具体使用什么就自己决定了,这里我实现正则匹配这一种。

execution(modifiers-pattern?ret-type-patterndeclaring-type-pattern?name-pattern(param-pattern)

throws-pattern?)

1.如何找到我们要增强的方法呢?

当我们确定好有哪些类的哪些方法需要增强,后面就需要考虑我们如何获取到这些方法(对方法增强肯定需要获取到具体的方法)。

2.有了表达式我们可以确定具体的类和方法,表达式只是定义了相对的路径,如何根据相对路径获取Class文件地址?

对bean实例的增强是在初始化的时候完成的,初始化的时候判断如果需要增强,则通过代理生成代理对象,在返回时由该代理对象代替原实例被注册到容器中。

3.Class文件有了,怎么取到类中的方法?

在前面章节中我们获取过方法,使用Class对象即可获取所有的非私有方法。在实际调用被增强方法时,将该方法与所有的advice进行匹配,如果有匹配到advice,则执行相应的增强。当然我们并不需要每一次都需要遍历获取,为了效率可以对方法和增强的advice进行缓存。

本文地址:https://blog.csdn.net/LuBanXue/article/details/110892325

相关标签: java spring aop