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

详细解读 Spring AOP 面向切面编程(二)

程序员文章站 2022-07-04 08:43:24
本文是《详细解读 Spring AOP 面向切面编程(一)》的续集。 在上篇中,我们从写死代码,到使用代理;从编程式 Spring AOP 到声明式 Spring AOP。一切都朝着简单实用主义的方向在发展。沿着 Spring AOP 的方向,Rod Johnson(老罗)花了不少心思,都是为了让我 ......

本文是《详细解读 spring aop 面向切面编程(一)》的续集。

在上篇中,我们从写死代码,到使用代理;从编程式 spring aop 到声明式 spring aop。一切都朝着简单实用主义的方向在发展。沿着 spring aop 的方向,rod johnson(老罗)花了不少心思,都是为了让我们使用 spring 框架时不会感受到麻烦,但事实却并非如此。那么,后来老罗究竟对 spring aop 做了哪些改进呢?
现在继续!

9. spring aop:切面

之前谈到的 aop 框架其实可以将它理解为一个拦截器框架,但这个拦截器似乎非常武断。比如说,如果它拦截了一个类,那么它就拦截了这个类中所有的方法。类似地,当我们在使用动态代理的时候,其实也遇到了这个问题。需要在代码中对所拦截的方法名加以判断,才能过滤出我们需要拦截的方法,想想这种做法确实不太优雅。在大量的真实项目中,似乎我们只需要拦截特定的方法就行了,没必要拦截所有的方法。于是,老罗同志借助了 aop 的一个很重要的工具,advisor(切面),来解决这个问题。它也是 aop 中的核心!是我们关注的重点!
也就是说,我们可以通过切面,将增强类与拦截匹配条件组合在一起,然后将这个切面配置到 proxyfactory 中,从而生成代理。
这里提到这个“拦截匹配条件”在 aop 中就叫做 pointcut(切点),其实说白了就是一个基于表达式的拦截条件罢了。
归纳一下,advisor(切面)封装了 advice(增强)与 pointcut(切点 )。当您理解了这句话后,就往下看吧。
我在 greetingimpl 类中故意增加了两个方法,都以“good”开头。下面要做的就是拦截这两个新增的方法,而对 sayhello() 方法不作拦截。
详细解读 Spring AOP 面向切面编程(二)