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

2022-07-26,,,,

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

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

对于我们的手写AOP,我们还需要提供这样的功能。当然,表达式是由用户编写的,我们的框架会解析用户的表达式,然后对应于特定的方法。

如何解析用户定义的表达式?如上所述,一个或多个不同的目标由一串字符匹配。我们的第一个反应必须是正则表达式。显然,可以通过使用正则表达式来实现此功能。

但实际上这样的表达式还有很多。比如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在线学习-SpringAop中pointcut的原理以及如何手动实现.doc》

下载本文的Word格式文档,以方便收藏与打印。