在上篇中,咱们从写死代码,到使用代理;从编程式 Spring AOP 到声明式 Spring AOP。一切都朝着简单实用主义的方向在发展。沿着 Spring AOP 的方向,Rod Johnson(老罗)花了很多心思,都是为了让咱们使用 Spring 框架时不会感觉到麻烦,但事实却并不是如此。那么,后来老罗究竟对 Spring AOP 作了哪些改进呢?
如今继续!spring
以前谈到的 AOP 框架其实能够将它理解为一个拦截器框架,但这个拦截器彷佛很是武断。好比说,若是它拦截了一个类,那么它就拦截了这个类中全部的方法。相似地,当咱们在使用动态代理的时候,其实也遇到了这个问题。须要在代码中对所拦截的方法名加以判断,才能过滤出咱们须要拦截的方法,想一想这种作法确实不太优雅。在大量的真实项目中,彷佛咱们只须要拦截特定的方法就好了,不必拦截全部的方法。因而,老罗同志借助了 AOP 的一个很重要的工具,Advisor(切面),来解决这个问题。它也是 AOP 中的核心!是咱们关注的重点!
也就是说,咱们能够经过切面,将加强类与拦截匹配条件组合在一块儿,而后将这个切面配置到 ProxyFactory 中,从而生成代理。
这里提到这个“拦截匹配条件”在 AOP 中就叫作 Pointcut(切点),其实说白了就是一个基于表达式的拦截条件罢了。
概括一下,Advisor(切面)封装了 Advice(加强)与 Pointcut(切点 )。当您理解了这句话后,就往下看吧。
我在 GreetingImpl 类中故意增长了两个方法,都以“good”开头。下面要作的就是拦截这两个新增的方法,而对 sayHello() 方法不做拦截。
编程