提示:
    在确认Advisor是否适用Bean时,在Class层和Method层确认方向上是相反的:
        1.Class层:当前Class是否在不匹配的集合内,是的话返回false;
        2.Method层:当前Class层中只有有一个方法适用,就返回true;
    这样做的原因是因为我们PointCut中是由ClassFilter和MethodMatcher两
    部分组成的。像在使用事务时,@Transaction在方法上标注就使用事务,不对
    Class层做任何限制(此时为ClassFilter.TRUE),如果使用Class匹配的集
    合内,就会导致大量非期望执行点包含进来了。
    ---这里充满了智慧,耐心理解

查找Bean适用的Advisor时序图如下:

查看大图

查找Bean适用的Advisor时序图

AopUtils部分源代码如下:

查看大图

AopUtils.canApply()源代码

最终结果不外乎两种:一种没找到,说明不用AOP代理;另一种是找到了,找到了就可以使用运用Spring生成AOP动态代理对象的基础设施来生成代理对象了,具体参:迈进AOP的大门动态代理对象生成方式-Jdk版动态代理对象生成方式-Cglib版。看完Bean的匹配,我们再细粒度看下:代理运行中如何查找方法适用的Advisor

快速导航: